diff --git a/kernel/padata.c b/kernel/padata.c index 44ea75bfd86810b0626a09fc3219c86d89dc17da..e87bbefdf0a0be084f5ad4d4b7ebed97ac4467af 100644 --- a/kernel/padata.c +++ b/kernel/padata.c @@ -307,8 +307,12 @@ static void padata_reorder(struct padata_priv *padata) struct padata_serial_queue *squeue; int cb_cpu; - cpu = cpumask_next_wrap(cpu, pd->cpumask.pcpu, -1, false); processed++; + /* When sequence wraps around, reset to the first CPU. */ + if (unlikely(processed == 0)) + cpu = cpumask_first(pd->cpumask.pcpu); + else + cpu = cpumask_next_wrap(cpu, pd->cpumask.pcpu, -1, false); cb_cpu = padata->cb_cpu; squeue = per_cpu_ptr(pd->squeue, cb_cpu);