kernel/futex: Kill rt_mutex_next_owner()
authorDavidlohr Bueso <dave@stgolabs.net>
Fri, 26 Feb 2021 17:50:26 +0000 (09:50 -0800)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 11 Mar 2021 18:19:17 +0000 (19:19 +0100)
commit9a4b99fce659c03699f1cb5003ebe7c57c084d49
tree7f5d448c069f69d96b3f0bad4b6d19ae80509708
parentbdb1050ee1faaec1e78c15de8b1959176f26c655
kernel/futex: Kill rt_mutex_next_owner()

Update wake_futex_pi() and kill the call altogether. This is possible because:

(i) The case of fixup_owner() in which the pi_mutex was stolen from the
signaled enqueued top-waiter which fails to trylock and doesn't see a
current owner of the rtmutex but needs to acknowledge an non-enqueued
higher priority waiter, which is the other alternative. This used to be
handled by rt_mutex_next_owner(), which guaranteed fixup_pi_state_owner('newowner')
never to be nil. Nowadays the logic is handled by an EAGAIN loop, without
the need of rt_mutex_next_owner(). Specifically:

    c1e2f0eaf015 (futex: Avoid violating the 10th rule of futex)
    9f5d1c336a10 (futex: Handle transient "ownerless" rtmutex state correctly)

(ii) rt_mutex_next_owner() and rt_mutex_top_waiter() are semantically
equivalent, as of:

    c28d62cf52d7 (locking/rtmutex: Handle non enqueued waiters gracefully in remove_waiter())

So instead of keeping the call around, just use the good ole rt_mutex_top_waiter().
No change in semantics.

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20210226175029.50335-1-dave@stgolabs.net
kernel/futex.c
kernel/locking/rtmutex.c
kernel/locking/rtmutex_common.h