On Fri, 2015-02-27 at 17:57 +0100, Sebastian Andrzej Siewior wrote: > The "usual" path is: > - rt_mutex_slowlock() > - set_current_state() > - task_blocks_on_rt_mutex() (ret 0) > - __rt_mutex_slowlock() > - sleep or not but do return with __set_current_state(TASK_RUNNING) > - back to caller. > > In the early error case where task_blocks_on_rt_mutex() return -EDEADLK > we never change the task's state back to RUNNING. I assume this is > intended. Without this change after ww_mutex using rt_mutex the selftest > passes but later I get plenty of > | bad: scheduling from the idle thread! > backtraces. > > Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de> > --- > kernel/locking/rtmutex.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c > index 6d7d72ffa619..c4d07f254bb4 100644 > --- a/kernel/locking/rtmutex.c > +++ b/kernel/locking/rtmutex.c > @@ -1305,6 +1305,7 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, > } > > if (unlikely(ret)) { > + set_current_state(TASK_RUNNING); > if (rt_mutex_has_waiters(lock)) > remove_waiter(lock, &waiter); > /* ww_mutex need the error reported */
This may want a Fixes: afffc6c1 tag, and should use the double underscore variant methinks. -Mike -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/