Re: Lockdep splat when unloading b43

From: Larry Finger
Date: Sun Feb 24 2013 - 14:38:56 EST


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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/