On 4/30/20 6:52 PM, Xiaoguang Wang wrote: > While working on to make io_uring sqpoll mode support syscalls that need > struct files_struct, I got cpu soft lockup in io_ring_ctx_wait_and_kill(), > while (ctx->sqo_thread && !wq_has_sleeper(&ctx->sqo_wait)) > cpu_relax(); > above loop never has an chance to exit, it's because preempt isn't enabled > in the kernel, and the context calling io_ring_ctx_wait_and_kill() and > io_sq_thread() run in the same cpu, if io_sq_thread calls a cond_resched() > yield cpu and another context enters above loop, then io_sq_thread() will > always in runqueue and never exit. > > Use cond_resched() can fix this issue. Thanks, this looks good, I believe it should also fix the syzbot reported issue so I added the tag for that. -- Jens Axboe