From 0f84747177b962c32243a57cb454193bdba4fe8d Mon Sep 17 00:00:00 2001 From: Pavel Begunkov Date: Thu, 17 Mar 2022 02:03:39 +0000 Subject: [PATCH] io_uring: remove extra barrier for non-sqpoll iopoll smp_mb() in io_cqring_ev_posted_iopoll() is only there because of waitqueue_active(). However, non-SQPOLL IOPOLL ring doesn't wake the CQ and so the barrier there is useless. Kill it, it's usually pretty expensive. Signed-off-by: Pavel Begunkov Link: https://lore.kernel.org/r/d72e8ef6f7a3f6a72e18fad8409f7d47afc8da7d.1647481208.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- fs/io_uring.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index f039706bce0e9..692dbe7b98e92 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1877,11 +1877,8 @@ static void io_cqring_ev_posted(struct io_ring_ctx *ctx) static void io_cqring_ev_posted_iopoll(struct io_ring_ctx *ctx) { - /* see waitqueue_active() comment */ - smp_mb(); - if (ctx->flags & IORING_SETUP_SQPOLL) { - if (waitqueue_active(&ctx->cq_wait)) + if (wq_has_sleeper(&ctx->cq_wait)) wake_up_all(&ctx->cq_wait); } io_eventfd_signal(ctx); -- 2.30.2