Commit 917257da authored by Jens Axboe's avatar Jens Axboe

io_uring: only test SQPOLL cpu after we've verified it

We currently call cpu_possible() even if we don't use the CPU. Move the
test under the SQ_AFF branch, which is the only place where we'll use
the value. Do the cpu_possible() test AFTER we've limited it to a max
of NR_CPUS. This avoids triggering the following warning:

WARNING: CPU: 1 PID: 7600 at include/linux/cpumask.h:121 cpu_max_bits_warn

if CONFIG_DEBUG_PER_CPU_MAPS is enabled.

While in there, also move the SQ thread idle period assignment inside
SETUP_SQPOLL, as we don't use it otherwise either.

Reported-by: syzbot+cd714a07c6de2bc34293@syzkaller.appspotmail.com
Fixes: 6c271ce2 ("io_uring: add submission polling")
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 06058632
...@@ -2241,10 +2241,6 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx, ...@@ -2241,10 +2241,6 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx,
mmgrab(current->mm); mmgrab(current->mm);
ctx->sqo_mm = current->mm; ctx->sqo_mm = current->mm;
ctx->sq_thread_idle = msecs_to_jiffies(p->sq_thread_idle);
if (!ctx->sq_thread_idle)
ctx->sq_thread_idle = HZ;
ret = -EINVAL; ret = -EINVAL;
if (!cpu_possible(p->sq_thread_cpu)) if (!cpu_possible(p->sq_thread_cpu))
goto err; goto err;
...@@ -2254,10 +2250,18 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx, ...@@ -2254,10 +2250,18 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx,
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
goto err; goto err;
ctx->sq_thread_idle = msecs_to_jiffies(p->sq_thread_idle);
if (!ctx->sq_thread_idle)
ctx->sq_thread_idle = HZ;
if (p->flags & IORING_SETUP_SQ_AFF) { if (p->flags & IORING_SETUP_SQ_AFF) {
int cpu; int cpu;
cpu = array_index_nospec(p->sq_thread_cpu, NR_CPUS); cpu = array_index_nospec(p->sq_thread_cpu, NR_CPUS);
ret = -EINVAL;
if (!cpu_possible(p->sq_thread_cpu))
goto err;
ctx->sqo_thread = kthread_create_on_cpu(io_sq_thread, ctx->sqo_thread = kthread_create_on_cpu(io_sq_thread,
ctx, cpu, ctx, cpu,
"io_uring-sq"); "io_uring-sq");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment