ChangeSet 1.1760.26.23, 2004/06/29 09:49:30-07:00, herbert@gondor.apana.org.au [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 drivers/usb/net/pegasus.c | 4 ---- 1 files changed, 4 deletions(-) diff -Nru a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c --- a/drivers/usb/net/pegasus.c 2004-06-29 16:24:54 -07:00 +++ b/drivers/usb/net/pegasus.c 2004-06-29 16:24:54 -07:00 @@ -1137,8 +1137,6 @@ { 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 @@ pegasus->flags |= ETH_REGS_CHANGE; ctrl_callback(pegasus->ctrl_urb, NULL); - - netif_wake_queue(net); } static __u8 mii_phy_probe(pegasus_t * pegasus)