[PATCH OLK-6.6] padata: Reset next CPU when reorder sequence wraps around
From: Xiao Liang <shaw.leon@gmail.com> mainline inclusion from mainline-v6.18-rc1 commit 501302d5cee0d8e8ec2c4a5919c37e0df9abc99b category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/ID3Y90 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i... -------------------------------- When seq_nr wraps around, the next reorder job with seq 0 is hashed to the first CPU in padata_do_serial(). Correspondingly, need reset pd->cpu to the first one when pd->processed wraps around. Otherwise, if the number of used CPUs is not a power of 2, padata_find_next() will be checking a wrong list, hence deadlock. Fixes: 6fc4dbcf0276 ("padata: Replace delayed timer with immediate workqueue in padata_reorder") Cc: <stable@vger.kernel.org> Signed-off-by: Xiao Liang <shaw.leon@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Conflicts: kernel/padata.c [In mainline, commit f954a2d37637 ("padata: switch padata_find_next() to using cpumask_next_wrap()") has change the "cpumask_next_wrap" function.] Signed-off-by: Wang Tao <wangtao554@huawei.com> --- kernel/padata.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/padata.c b/kernel/padata.c index 44ea75bfd868..e87bbefdf0a0 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); -- 2.34.1
反馈: 您发送到kernel@openeuler.org的补丁/补丁集,已成功转换为PR! PR链接地址: https://gitee.com/openeuler/kernel/pulls/18784 邮件列表地址:https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/H5P... FeedBack: The patch(es) which you have sent to kernel@openeuler.org mailing list has been converted to a pull request successfully! Pull request link: https://gitee.com/openeuler/kernel/pulls/18784 Mailing list address: https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/H5P...
participants (2)
-
patchwork bot -
Wang Tao