diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2001-06-10 16:12:50 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2001-06-10 16:12:50 +0000 |
commit | 764fb51bab6c4f71a6708a275d246d260cc7fa05 (patch) | |
tree | 55468bd94262ce739f7f32a82306785ce9f3962c /drivers/net/ioc3-eth.c | |
parent | 56fdccbf76796b4c524b496e2316f327493d860f (diff) |
Fix computation of multicast filter bitmask. Before this only joining
upto one multicast group at any given time was working. Fix locking.
Diffstat (limited to 'drivers/net/ioc3-eth.c')
-rw-r--r-- | drivers/net/ioc3-eth.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c index 0fa6b3e8f..008e9afbd 100644 --- a/drivers/net/ioc3-eth.c +++ b/drivers/net/ioc3-eth.c @@ -1787,10 +1787,11 @@ static void ioc3_set_multicast_list(struct net_device *dev) struct dev_mc_list *dmi = dev->mc_list; struct ioc3_private *ip = dev->priv; struct ioc3 *ioc3 = ip->regs; - char *addr = dmi->dmi_addr; u64 ehar = 0; int i; + netif_stop_queue(dev); /* Lock out others. */ + if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ /* Unconditionally log net taps. */ printk(KERN_INFO "%s: Promiscuous mode enabled.\n", dev->name); @@ -1810,6 +1811,7 @@ static void ioc3_set_multicast_list(struct net_device *dev) ip->ehar_l = 0xffffffff; } else { for (i = 0; i < dev->mc_count; i++) { + char *addr = dmi->dmi_addr; dmi = dmi->next; if (!(*addr & 1)) @@ -1823,6 +1825,8 @@ static void ioc3_set_multicast_list(struct net_device *dev) ioc3->ehar_h = ip->ehar_h; ioc3->ehar_l = ip->ehar_l; } + + netif_wake_queue(dev); /* Let us get going again. */ } MODULE_AUTHOR("Ralf Baechle <ralf@oss.sgi.com>"); |