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
pgpcKsoDg6PyO.pgp
Description: PGP signature