Hopefully the sched core changes are palatable. io-wq uses the same sched in/out hooks as workqueue, and if the task isn't either a workqueue or io-wq worker, there should be no extra overhead there. Patches are on top of my for-5.5/io_uring branch, and can also be found here: http://git.kernel.dk/cgit/linux-block/log/?h=for-5.5/io_uring-wq This passes io_uring IO testing and repeated runs of the liburing regressions suite, and passes tests that would previously deadlock. Also see LWN article here: https://lwn.net/Articles/803070/ Changes since v1: - Fix dependent work hash - Turn wqe->state into wqe->flags - Fix issue with unusing mm/files if worker got busy at exit timo - Fix issue with hashed work bit mangling (Colin) - Fix issue with dependent work - Rebase fs/Kconfig | 3 + fs/Makefile | 1 + fs/io-wq.c | 805 ++++++++++++++++++++++++++++++++ fs/io-wq.h | 55 +++ fs/io_uring.c | 414 ++++------------ include/linux/sched.h | 1 + include/trace/events/io_uring.h | 12 +- init/Kconfig | 1 + kernel/sched/core.c | 16 +- 9 files changed, 981 insertions(+), 327 deletions(-) -- Jens Axboe