Messages in this thread | | | Subject | Re: [PATCH] [RFC] EEE PC hangs when booting off battery | From | Johannes Berg <> | Date | Tue, 28 Apr 2009 11:58:08 +0200 |
| |
It seems the only reason lockdep doesn't warn is the detour to userspace (modprobe) and the waiting for a userspace task (waiting isn't lockdep annotated and I don't think it can be)
It seems you cannot load a module while under _any_ lock, ever, since userspace might turn around and do something that requires that lock? I think we should probably add a warning to the code that waits for the userspace task:
debug_check_no_locks_held(current);
Or not? Some purely internal locks _might_ be ok... but how could you verify that?
> - ieee80211_wep_init(), which is called with rtnl_lock() held, is > blocked in request_module() [waiting for modprobe to load a crypto module].
Right.
> - modprobe is blocked in a call to flush_workqueue(), caused by closing > a TTY.
Can you point out where? I can't find that.
> - worker_thread is blocked because the workqueue item linkwatch_event() > is blocked on rtnl_lock.
This I know about.
> I've hacked up a test patch to move wep_init() outside of rtnl_lock, and > it solved the problem. My one caveat is that it would probably be > cleaner to move it after rtnl_unlock(), instead of before rtnl_lock(). > I just wasn't 100% sure if that would be safe. Here's the patch:
That doesn't seem relevant, this just does some initialisation. However, you definitely missed adding a call to wep_free().
johannes [unhandled content-type:application/pgp-signature] | |