]> git.baikalelectronics.ru Git - kernel.git/commit
locking/rtmutex: Return success on deadlock for ww_mutex waiters
authorPeter Zijlstra <peterz@infradead.org>
Thu, 26 Aug 2021 08:48:18 +0000 (10:48 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 27 Aug 2021 12:28:49 +0000 (14:28 +0200)
commit15380c1296988aeed5c43268e1659b30162eaf9e
tree765871f3a38bf75449cc41a0fcd530fa421f2835
parent35d591f7c350e84c37384b0db18bf5d166e09920
locking/rtmutex: Return success on deadlock for ww_mutex waiters

ww_mutexes can legitimately cause a deadlock situation in the lock graph
which is resolved afterwards by the wait/wound mechanics. The rtmutex chain
walk can detect such a deadlock and returns EDEADLK which in turn skips the
wait/wound mechanism and returns EDEADLK to the caller. That's wrong
because both lock chains might get EDEADLK or the wrong waiter would back
out.

Detect that situation and return 'success' in case that the waiter which
initiated the chain walk is a ww_mutex with context. This allows the
wait/wound mechanics to resolve the situation according to the rules.

[ tglx: Split it apart and added changelog ]

Reported-by: Sebastian Siewior <bigeasy@linutronix.de>
Fixes: ba44ef3d68ae ("locking/rtmutex: Extend the rtmutex core to support ww_mutex")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/YSeWjCHoK4v5OcOt@hirez.programming.kicks-ass.net
kernel/locking/rtmutex.c