Hi, This adds support for IORING_OP_WAITID, which is an async variant of the waitid(2) syscall. Rather than have a parent need to block waiting on a child task state change, it can now simply get an async notication when the requested state change has occured. Patches 1..4 are purely prep patches, and should not have functional changes. They split out parts of do_wait() into __do_wait(), so that the prepare-to-wait and sleep parts are contained within do_wait(). Patch 5 adds io_uring support. I wrote a few basic tests for this, which can be found in the 'waitid' branch of liburing: https://git.kernel.dk/cgit/liburing/log/?h=waitid Also spun a custom kernel for someone to test it, and no issues reported so far. The code can also be found here: https://git.kernel.dk/cgit/linux/log/?h=io_uring-waitid include/linux/io_uring_types.h | 2 + include/uapi/linux/io_uring.h | 2 + io_uring/Makefile | 3 +- io_uring/cancel.c | 5 + io_uring/io_uring.c | 3 + io_uring/opdef.c | 10 +- io_uring/waitid.c | 372 +++++++++++++++++++++++++++++++++ io_uring/waitid.h | 15 ++ kernel/exit.c | 131 ++++++------ kernel/exit.h | 30 +++ 10 files changed, 512 insertions(+), 61 deletions(-) Changes since v3: - Rebase on current tree - Move it before the futex changes. Note that if you're testing this, this means that the opcode values have changed. The liburing repo has been rebased as a result as well, you'll want to update that too. liburing also has update test cases. - Fix races between cancelation and wakeup trigger. This follows a scheme similar to the internal poll io_uring handling -- Jens Axboe