On Tue, Mar 18, 2014 at 1:51 PM, Grant Grundler <grundler@xxxxxxxxxx> wrote: > 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 BTW, full console output is available on this public patch: https://code.google.com/p/chromium/issues/detail?id=353648 cheers, grant > > 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