On Friday 11 August 2006 01:34, Johannes Berg wrote:
> This is running wireless-dev from yesterday. All I did was plug in a
> rt2500usb device into a usb port on a freshly booted system. I have a
> feeling that this is could be one of the problems reported earlier with
> the d80211 stack, but I haven't mastered the art of picking through
> these traces yet... What's swapper doing in there?
>
Ok, so it looks like dev_activate (called by dev_open) grabs queue_lock, then 
calls another function (dev_watchdog_up) which grabs xmit_lock. However, at 
that point, the device is up enough that someone who wants to try 
transmitting, can transmit (I think). If they're unlucky enough to transmit 
after the queue_lock is grabbed but before xmit_lock, we get a deadlock.

This seems avoidable either by setting carrier_off before calling dev_open, 
and turning it back on at a safe point (on association?), or simply refusing 
to transmit until it is reasonable to do so. (a similar thing was done in 
adm8211: call netif_stop_queue and return 1 if we're not ready to tx yet in 
order to hold skbs until association, where netif_wake_queue would be 
called.)

-Michael Wu

Attachment: pgpcKsoDg6PyO.pgp
Description: PGP signature

Reply via email to