On Mon, Mar 17, 2014 at 2:55 PM, Oliver Neukum <oneukum@xxxxxxx> wrote: > I am hping for the reporter of the original bug to test it. Oliver, on a haswell system running ChromeOS-3.8 kernel, this patch as-is resulted in a "Bad Spinlock Magic" error and subsequent pagefault. I believe the sequence was: usbnet_open -> tasklet_schedule(dev->bh) -> usbnet_bh -> wake_up (&dev->wait) -> panic I tried adding the following change on top of your patch but believe the plumbing still isn't quite correct since the USB device (eth0) is reporting a link but no TX or RX of traffic: @@ -805,6 +807,9 @@ int usbnet_open (struct net_device *net) goto done; } + /* usbnet_bh() expects the spinlock to be initialized. */ + init_waitqueue_head(&dev->wait); + /* hard_mtu or rx_urb_size may change in reset() */ usbnet_update_max_qlen(dev); I suspect this hunk of your patch is now causing different problems at init time: @@ -1438,10 +1440,8 @@ static void usbnet_bh (unsigned long param) clear_bit(EVENT_RX_KILL, &dev->flags); // waiting for all pending urbs to complete? - if (dev->wait) { - if ((dev->txq.qlen + dev->rxq.qlen + dev->done.qlen) == 0) { - wake_up (dev->wait); - } + if ((dev->txq.qlen + dev->rxq.qlen + dev->done.qlen) == 0) { + wake_up (&dev->wait); // or are we maybe short a few urbs? } else if (netif_running (dev->net) && Please advise on what you'd like me to try next. cheers, grant -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html