[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20101101.092246.104046133.davem@davemloft.net>
Date: Mon, 01 Nov 2010 09:22:46 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: mirqus@...il.com
Cc: mad_soft@...ox.ru, linux-usb@...r.kernel.org,
dbrownell@...rs.sourceforge.net, gregkh@...e.de,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
therbert@...gle.com
Subject: Re: [PATCH] USB: gadget: fix ethernet gadget crash in gether_setup
From: Michał Mirosław <mirqus@...il.com>
Date: Mon, 1 Nov 2010 17:16:39 +0100
> 2010/10/28 Dmitry Artamonow <mad_soft@...ox.ru>:
>> 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@...ox.ru>
>> ---
>> 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.
Powered by blists - more mailing lists