summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2001-06-10 16:12:50 +0000
committerRalf Baechle <ralf@linux-mips.org>2001-06-10 16:12:50 +0000
commit764fb51bab6c4f71a6708a275d246d260cc7fa05 (patch)
tree55468bd94262ce739f7f32a82306785ce9f3962c
parent56fdccbf76796b4c524b496e2316f327493d860f (diff)
Fix computation of multicast filter bitmask. Before this only joining
upto one multicast group at any given time was working. Fix locking.
-rw-r--r--drivers/net/ioc3-eth.c6
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>");