From: MichaÅ MirosÅaw <mirqus@xxxxxxxxx> Date: Mon, 1 Nov 2010 17:16:39 +0100 > 2010/10/28 Dmitry Artamonow <mad_soft@xxxxxxxx>: >> Crash is triggered by commit e6484930d7 ("net: allocate tx queues in >> register_netdevice"), which moved tx netqueue creation into register_netdev. >> So now calling netif_stop_queue() before register_netdev causes an oops. >> Move netif_stop_queue() after net device registration to fix crash. >> >> Signed-off-by: Dmitry Artamonow <mad_soft@xxxxxxxx> >> --- >> Âdrivers/usb/gadget/u_ether.c |  Â2 +- >> Â1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c >> index 6bb876d..cb23355 100644 >> --- a/drivers/usb/gadget/u_ether.c >> +++ b/drivers/usb/gadget/u_ether.c >> @@ -797,7 +797,6 @@ int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN]) >>     * Â- iff DATA transfer is active, carrier is "on" >>     * Â- tx queueing enabled if open *and* carrier is "on" >>     */ >> -    netif_stop_queue(net); >>    Ânetif_carrier_off(net); >> >>    Âdev->gadget = g; >> @@ -812,6 +811,7 @@ int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN]) >>        ÂINFO(dev, "MAC %pM\n", net->dev_addr); >>        ÂINFO(dev, "HOST MAC %pM\n", dev->host_mac); >> >> +        netif_stop_queue(net); >>        Âthe_dev = dev; >>    Â} >> > > What about a race between register_netdev() -> open() -> rest of > gether_setup() ? What is this netif_stop_queue() here needed for? Nothing, it should be completely removed. ÿô.nÇ·®+%˱é¥wÿº{.nÇ·¥{±þë)íèjg¬±¨¶Ýjÿ¾«þG«é¸¢·¦j:+v¨wèm¶ÿþø®w¥þ࣢·hâÿÙ