Commit 30c3c85b authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Sebastian Andrzej Siewior
Browse files

locking/rtmutex: Fix ww_mutex deadlock check

Dan reported that rt_mutex_adjust_prio_chain() can be called with
.orig_waiter == NULL however commit a055fcc1 ("locking/rtmutex:
Return success on deadlock for ww_mutex waiters") unconditionally
dereferences it.

Since both call-sites that have .orig_waiter == NULL don't care for the
return value, simply disable the deadlock squash by adding the NULL

Notably, both callers use the deadlock condition as a termination
condition for the iteration; once detected, we're sure (de)boosting is
done. Arguably [3] would be a more natural termination point, but I'm
not sure adding a third deadlock detection state would improve the code.

Fixes: a055fcc1

 ("locking/rtmutex: Return success on deadlock for ww_mutex waiters")
Reported-by: default avatarDan Carpenter <>
Signed-off-by: default avatarPeter Zijlstra (Intel) <>
Signed-off-by: default avatarSebastian Andrzej Siewior <>
parent 2c14fa80
......@@ -753,7 +753,7 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
* other configuration and we fail to report; also, see
* lockdep.
if (IS_ENABLED(CONFIG_PREEMPT_RT) && orig_waiter->ww_ctx)
if (IS_ENABLED(CONFIG_PREEMPT_RT) && orig_waiter && orig_waiter->ww_ctx)
ret = 0;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment