Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: BUG: sleeping function called from invalid context at kernel/mutex.c | Date | Thu, 7 Apr 2011 07:53:47 +0200 |
| |
On Wednesday, April 06, 2011, Peter Zijlstra wrote: > On Wed, 2011-04-06 at 06:43 +0200, Rafael J. Wysocki wrote: > > > the $subject text sound like it triggered might_sleep(), and that had a > > > system_state != SYSTEM_RUNNING bail condition, but then, I've no clue > > > what resume looks like. > > > > Early resume looks pretty much like the system startup, e.g. everything > > called from syscore_ops should not be sleepable (although mutexes shouldn't > > trigger, because that code is effectively single-threaded, unless somebody > > holds the mutex in question when that code is being executed, but that would > > deadlock anyway). > > Right, so system_state != SYSTEM_RUNNING should be true for resume?
It is not, although it probably should be.
First, some time ago there was opposition to adding more different possible values of system_state and it wasn't clear which of the existing values should be used instead of SYSTEM_RUNNING during suspend/resume. We ended up sticking to SYSTEM_RUNNING for that reason long enough for some code to develop the expectation of system_state == SYSTEM_RUNNING during suspend/resume (IOW, changing that right now would probably break stuff).
Second, even if we decide to switch from SYSTEM_RUNNING to something else during suspend (and back during resume), it's not entirely clear what's the right place to do so.
Thanks, Rafael
| |