diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2023-02-11 22:11:18 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-02-11 22:11:18 +0300 |
commit | 338c84730406c30185d54b565d670e7e7c96967b (patch) | |
tree | f6a7f80a01721dff444395c9268209e70d08db63 | |
parent | d12aca5c0cee0da197ca55241bcc5ec55dd5ae58 (diff) | |
parent | db370a8b9f67ae5f17e3d5482493294467784504 (diff) | |
download | linux-338c84730406c30185d54b565d670e7e7c96967b.tar.xz |
Merge tag 'locking-urgent-2023-02-11' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull locking fix from Ingo Molnar:
"Fix an rtmutex missed-wakeup bug"
* tag 'locking-urgent-2023-02-11' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
rtmutex: Ensure that the top waiter is always woken up
-rw-r--r-- | kernel/locking/rtmutex.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c index 010cf4e6d0b8..728f434de2bb 100644 --- a/kernel/locking/rtmutex.c +++ b/kernel/locking/rtmutex.c @@ -901,8 +901,9 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task, * then we need to wake the new top waiter up to try * to get the lock. */ - if (prerequeue_top_waiter != rt_mutex_top_waiter(lock)) - wake_up_state(waiter->task, waiter->wake_state); + top_waiter = rt_mutex_top_waiter(lock); + if (prerequeue_top_waiter != top_waiter) + wake_up_state(top_waiter->task, top_waiter->wake_state); raw_spin_unlock_irq(&lock->wait_lock); return 0; } |