From: Michał Mirosław Date: Mon, 1 Nov 2010 17:16:39 +0100 > 2010/10/28 Dmitry Artamonow : >> 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 >> --- >>  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. NrybXǧv^)޺{.n+{^nrzh&vfp)br ++zfh~izw?&)ߢf