On 02/24/2013 12:14 PM, Johannes Berg wrote:
On Sun, 2013-02-24 at 11:31 -0600, Larry Finger wrote:
Thanks for the detailed analysis. It was very helpful.
Here request_firmware calls wiphy_register which locks the RTNL, and
it's running from the work struct. This was newly introduced by commit
ecb4433550f0620f3d1471ae7099037ede30a91e
Author: Stanislaw Gruszka <sgruszka@xxxxxxxxxx>
Date: Fri Aug 12 14:00:59 2011 +0200
mac80211: fix suspend/resume races with unregister hw
That commit may bear some responsibility, but commit
6b6fa5868eec26bdc6a83543cebb8cf832a2645a
Author: Larry Finger <Larry.Finger@xxxxxxxxxxxx>
Date: Thu Mar 8 22:27:46 2012 -0600
b43: Load firmware from a work queue and not from the probe routine
is also at fault.
Anyway, the solution probably is to move the cancel_work_sync into
something like the ssb deregister.
This fix was also suggested by Michael - it works.
The change to load the firmware from a work queue failed when b43 was built into
the kernel, which required commit 5e20a4b53094651d80f856ff55a916b999dbb57a
Author: Larry Finger <Larry.Finger@xxxxxxxxxxxx>
Date: Thu Dec 20 15:55:01 2012 -0600
b43: Fix firmware loading when driver is built into the kernel
I probably should do a rewrite of firmware loading, but that is unlikely to
happen. Fortunately, moving the cancel work call is a small enough change that
it can be backported to stable.
Thanks,
Larry
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html