All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guo Xuenan <guoxuenan@huawei.com>
To: <axboe@kernel.dk>, <asml.silence@gmail.com>, <io-uring@vger.kernel.org>
Cc: <houtao1@huawei.com>, <yi.zhang@huawei.com>,
	<chengzhihao1@huawei.com>, <guoxuenan@huawei.com>,
	<linux-kernel@vger.kernel.org>
Subject: [PATCH] io_uring: add a schedule condition in io_submit_sqes
Date: Sat, 21 May 2022 22:33:27 +0800	[thread overview]
Message-ID: <20220521143327.3959685-1-guoxuenan@huawei.com> (raw)

when set up sq ring size with IORING_MAX_ENTRIES, io_submit_sqes may
looping ~32768 times which may trigger soft lockups. add need_resched
condition to avoid this bad situation.

set sq ring size 32768 and using io_sq_thread to perform stress test
as follows:
watchdog: BUG: soft lockup - CPU#2 stuck for 26s! [iou-sqp-600:601]
Kernel panic - not syncing: softlockup: hung tasks
CPU: 2 PID: 601 Comm: iou-sqp-600 Tainted: G L 5.18.0-rc7+ #3
Hardware name: linux,dummy-virt (DT)
Call trace:
 dump_backtrace+0x218/0x228
 show_stack+0x20/0x68
 dump_stack_lvl+0x68/0x84
 dump_stack+0x1c/0x38
 panic+0x1ec/0x3ec
 watchdog_timer_fn+0x28c/0x300
 __hrtimer_run_queues+0x1d8/0x498
 hrtimer_interrupt+0x238/0x558
 arch_timer_handler_virt+0x48/0x60
 handle_percpu_devid_irq+0xdc/0x270
 generic_handle_domain_irq+0x50/0x70
 gic_handle_irq+0x8c/0x4bc
 call_on_irq_stack+0x2c/0x38
 do_interrupt_handler+0xc4/0xc8
 el1_interrupt+0x48/0xb0
 el1h_64_irq_handler+0x18/0x28
 el1h_64_irq+0x74/0x78
 console_unlock+0x5d0/0x908
 vprintk_emit+0x21c/0x470
 vprintk_default+0x40/0x50
 vprintk+0xd0/0x128
 _printk+0xb4/0xe8
 io_issue_sqe+0x1784/0x2908
 io_submit_sqes+0x538/0x2880
 io_sq_thread+0x328/0x7b0
 ret_from_fork+0x10/0x20
SMP: stopping secondary CPUs
Kernel Offset: 0x40f1e8600000 from 0xffff800008000000
PHYS_OFFSET: 0xfffffa8c80000000
CPU features: 0x110,0000cf09,00001006
Memory Limit: none
---[ end Kernel panic - not syncing: softlockup: hung tasks ]---

Signed-off-by: Guo Xuenan <guoxuenan@huawei.com>
---
 fs/io_uring.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/io_uring.c b/fs/io_uring.c
index 92ac50f139cd..d897c6798f00 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -7864,7 +7864,7 @@ static int io_submit_sqes(struct io_ring_ctx *ctx, unsigned int nr)
 			if (!(ctx->flags & IORING_SETUP_SUBMIT_ALL))
 				break;
 		}
-	} while (submitted < nr);
+	} while (submitted < nr && !need_resched());
 
 	if (unlikely(submitted != nr)) {
 		int ref_used = (submitted == -EAGAIN) ? 0 : submitted;
-- 
2.25.1


             reply	other threads:[~2022-05-21 14:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-21 14:33 Guo Xuenan [this message]
2022-05-22  2:42 ` [PATCH] io_uring: add a schedule condition in io_submit_sqes Jens Axboe
2022-05-23 14:45   ` Guo Xuenan
2022-05-23 16:27     ` Jens Axboe
2022-05-24  6:58       ` Guo Xuenan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220521143327.3959685-1-guoxuenan@huawei.com \
    --to=guoxuenan@huawei.com \
    --cc=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=chengzhihao1@huawei.com \
    --cc=houtao1@huawei.com \
    --cc=io-uring@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=yi.zhang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.