diff options
| author | Jens Axboe <axboe@kernel.dk> | 2026-08-14 06:58:43 -0600 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2026-08-15 16:56:49 -0600 |
| commit | cd305ee3633a45fcf5f3a5d83f99f3cb77d87b6e (patch) | |
| tree | e1f283753d2fc2c70ee734f441137dca73f61308 /tools/perf/scripts/python/bin | |
| parent | 3f3a6a16bbe8bde76532d9415438f8cdef439e5d (diff) | |
io_uring: defer eventfd signaling when queued from a wakeup handler
io_req_local_work_add() signals the CQ ring eventfd inline when it is the
one to push the first entry onto ->work_list. For DEFER_TASKRUN rings that
add is frequently done from a waitqueue wakeup handler, where an
arbitrary waitqueue lock is held.
eventfd_signal_mask() only refuses to recurse when current->in_eventfd
is set, but that bit is set by eventfd_signal_mask() itself. If the wake
chain starts somewhere else, signal goes out inline and can feed back
into epoll.
Add IOU_F_TWQ_IN_WAKE, set it on the task_work add done from the three
waitqueue callbacks, and use it to force io_eventfd_signal() down the
existing call_rcu_hurry() deferral instead of signaling inline.
Fixes: 21a091b970cd ("io_uring: signal registered eventfd to process deferred task work")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20260813133843.2933127-1-4ncienth@gmail.com/
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'tools/perf/scripts/python/bin')
0 files changed, 0 insertions, 0 deletions
