Message ID | 89f880574eceee6f4899783377ead234df7b3d04.1672916894.git.asml.silence@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | cq wait refactoring rebase | expand |
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 54ec0106ab83..420b022f6c31 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2476,7 +2476,9 @@ static inline int io_cqring_wait_schedule(struct io_ring_ctx *ctx, return -EINTR; if (unlikely(io_should_wake(iowq))) return 0; - if (!schedule_hrtimeout(timeout, HRTIMER_MODE_ABS)) + if (*timeout == KTIME_MAX) + schedule(); + else if (!schedule_hrtimeout(timeout, HRTIMER_MODE_ABS)) return -ETIME; return 0; }
Unlike the jiffy scheduling version, schedule_hrtimeout() jumps a few functions before getting into schedule() even if there is no actual timeout needed. Some tests showed that it takes up to 1% of CPU cycles. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> --- io_uring/io_uring.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)