futex: factor out the futex wake handling
authorJens Axboe <axboe@kernel.dk>
Thu, 8 Jun 2023 17:56:06 +0000 (11:56 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 29 Sep 2023 08:36:50 +0000 (02:36 -0600)
commit12a4be50aff30ee8f2c6a64020c82a4e997e8d6c
tree937a1ca21d45fffe18df90c45fe3eb4eb40b610e
parent3b0781595431acafe3db6596e12deb46975d91dd
futex: factor out the futex wake handling

In preparation for having another waker that isn't futex_wake_mark(),
add a wake handler in futex_q. No extra data is associated with the
handler outside of struct futex_q itself. futex_wake_mark() is defined as
the standard wakeup helper, now set through futex_q_init like other
defaults.

Normal sync futex waiting relies on wake_q holding tasks that should
be woken up. This is what futex_wake_mark() does, it'll unqueue the
futex and add the associated task to the wake queue. For async usage of
futex waiting, rather than having tasks sleeping on the futex, we'll
need to deal with a futex wake differently. For the planned io_uring
case, that means posting a completion event for the task in question.
Having a definable wake handler can help support that use case.

Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
kernel/futex/futex.h
kernel/futex/requeue.c
kernel/futex/waitwake.c