• Jens Axboe's avatar
    futex: factor out the futex wake handling · 12a4be50
    Jens Axboe authored
    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: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    12a4be50
waitwake.c 19.5 KB