summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2004-06-28 19:49:30 -0700
committerGreg Kroah-Hartman <greg@kroah.com>2004-06-28 19:49:30 -0700
commit52c190d8dd0d184a239379458045a7a01002ec7d (patch)
tree4ff643aec6195095001ce9f32872e02e5e5e68fa
parent60cfbb5503bf8979a8769d58d5bd976f9f1e12f9 (diff)
[PATCH] USB: Fix pegasus_set_multicast lockup in drivers/usb/net/pegasus.c
I strongly recommend that this patch be applied. Without this patch, running tcpdump on an SMP machine with the pegasus adapter locks up 9 times out of 10. This is what happens: CPU0 CPU1 pegasus_start_xmit netif_stop_queue pegasus_set_multicast netif_stop_queue netif_wake_queue Which crashes if another packet is sent to pegasus_start_xmit before the first one is finished. If there are other drivers doing this, please fix them too. PS I submitted this to Petkan years ago but he probably lost it. Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
-rw-r--r--drivers/usb/net/pegasus.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c
index 5142d8a070b4..f4f1071a3ff2 100644
--- a/drivers/usb/net/pegasus.c
+++ b/drivers/usb/net/pegasus.c
@@ -1137,8 +1137,6 @@ static void pegasus_set_multicast(struct net_device *net)
{
pegasus_t *pegasus = net->priv;
- netif_stop_queue(net);
-
if (net->flags & IFF_PROMISC) {
pegasus->eth_regs[EthCtrl2] |= RX_PROMISCUOUS;
info("%s: Promiscuous mode enabled", net->name);
@@ -1154,8 +1152,6 @@ static void pegasus_set_multicast(struct net_device *net)
pegasus->flags |= ETH_REGS_CHANGE;
ctrl_callback(pegasus->ctrl_urb, NULL);
-
- netif_wake_queue(net);
}
static __u8 mii_phy_probe(pegasus_t * pegasus)