From 764fb51bab6c4f71a6708a275d246d260cc7fa05 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Sun, 10 Jun 2001 16:12:50 +0000 Subject: Fix computation of multicast filter bitmask. Before this only joining upto one multicast group at any given time was working. Fix locking. --- drivers/net/ioc3-eth.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 "); -- cgit v1.2.3