Merge branch 'sfc-2.6.39' of git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc-2.6
[cascardo/linux.git] / drivers / net / usb / smsc95xx.c
index bc86f4b..727874d 100644 (file)
@@ -49,6 +49,8 @@
 
 struct smsc95xx_priv {
        u32 mac_cr;
+       u32 hash_hi;
+       u32 hash_lo;
        spinlock_t mac_cr_lock;
        bool use_tx_csum;
        bool use_rx_csum;
@@ -370,10 +372,11 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
 {
        struct usbnet *dev = netdev_priv(netdev);
        struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
-       u32 hash_hi = 0;
-       u32 hash_lo = 0;
        unsigned long flags;
 
+       pdata->hash_hi = 0;
+       pdata->hash_lo = 0;
+
        spin_lock_irqsave(&pdata->mac_cr_lock, flags);
 
        if (dev->net->flags & IFF_PROMISC) {
@@ -394,13 +397,13 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
                        u32 bitnum = smsc95xx_hash(ha->addr);
                        u32 mask = 0x01 << (bitnum & 0x1F);
                        if (bitnum & 0x20)
-                               hash_hi |= mask;
+                               pdata->hash_hi |= mask;
                        else
-                               hash_lo |= mask;
+                               pdata->hash_lo |= mask;
                }
 
                netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n",
-                                  hash_hi, hash_lo);
+                                  pdata->hash_hi, pdata->hash_lo);
        } else {
                netif_dbg(dev, drv, dev->net, "receive own packets only\n");
                pdata->mac_cr &=
@@ -410,8 +413,8 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
        spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
 
        /* Initiate async writes, as we can't wait for completion here */
-       smsc95xx_write_reg_async(dev, HASHH, &hash_hi);
-       smsc95xx_write_reg_async(dev, HASHL, &hash_lo);
+       smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi);
+       smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo);
        smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr);
 }