sched/wake_q: Add helper to call wake_up_q after unlock with preemption disabled
authorJohn Stultz <jstultz@google.com>
Tue, 17 Dec 2024 04:07:35 +0000 (20:07 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 20 Dec 2024 14:31:21 +0000 (15:31 +0100)
commitabfdccd6af2b071951633e57d6322c46a1ea791f
treed852a162cbe01984b07795b714d31e39b6e85450
parentc2db11a750fb626d0d04f2dc76e548a1f07617df
sched/wake_q: Add helper to call wake_up_q after unlock with preemption disabled

A common pattern seen when wake_qs are used to defer a wakeup
until after a lock is released is something like:
  preempt_disable();
  raw_spin_unlock(lock);
  wake_up_q(wake_q);
  preempt_enable();

So create some raw_spin_unlock*_wake() helper functions to clean
this up.

Applies on top of the fix I submitted here:
 https://lore.kernel.org/lkml/20241212222138.2400498-1-jstultz@google.com/

NOTE: I recognise the unlock()/unlock_irq()/unlock_irqrestore()
variants creates its own duplication, which we could use a macro
to generate the similar functions, but I often dislike how those
generation macros making finding the actual implementation
harder, so I left the three functions as is. If folks would
prefer otherwise, let me know and I'll switch it.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: John Stultz <jstultz@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20241217040803.243420-1-jstultz@google.com
include/linux/sched/wake_q.h
kernel/futex/pi.c
kernel/locking/mutex.c
kernel/locking/rtmutex.c