]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
locking/rtmutex: Make sure we wake anything on the wake_q when we release the lock...
authorJohn Stultz <jstultz@google.com>
Thu, 12 Dec 2024 22:21:33 +0000 (14:21 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Tue, 17 Dec 2024 16:47:24 +0000 (17:47 +0100)
commit4a077914578183ec397ad09f7156a357e00e5d72
treee887d0db4b3e7c82907f5759b85207accde2a2c3
parent78d4f34e2115b517bcbfe7ec0d018bbbb6f9b0b8
locking/rtmutex: Make sure we wake anything on the wake_q when we release the lock->wait_lock

Bert reported seeing occasional boot hangs when running with
PREEPT_RT and bisected it down to commit 894d1b3db41c
("locking/mutex: Remove wakeups from under mutex::wait_lock").

It looks like I missed a few spots where we drop the wait_lock and
potentially call into schedule without waking up the tasks on the
wake_q structure. Since the tasks being woken are ww_mutex tasks
they need to be able to run to release the mutex and unblock the
task that currently is planning to wake them. Thus we can deadlock.

So make sure we wake the wake_q tasks when we unlock the wait_lock.

Closes: https://lore.kernel.org/lkml/20241211182502.2915-1-spasswolf@web.de
Fixes: 894d1b3db41c ("locking/mutex: Remove wakeups from under mutex::wait_lock")
Reported-by: Bert Karwatzki <spasswolf@web.de>
Signed-off-by: John Stultz <jstultz@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20241212222138.2400498-1-jstultz@google.com
kernel/locking/rtmutex.c
kernel/locking/rtmutex_api.c