kernel/workqueue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Now when isolcpus is enabled via the cmdline, wq_isolated_cpumask does
not include these isolated CPUs, even wq_unbound_cpumask has already
excluded them. It is only when we successfully configure an isolate cpuset
partition that wq_isolated_cpumask gets overwritten by
workqueue_unbound_exclude_cpumask(), including both the cmdline-specified
isolated CPUs and the isolated CPUs within the cpuset partitions.
Fix this issue by initializing wq_isolated_cpumask properly in
workqueue_init_early().
Fixes: fe28f631fa94 ("workqueue: Add workqueue_unbound_exclude_cpumask() to exclude CPUs from wq_unbound_cpumask")
Signed-off-by: Chuyi Zhou <zhouchuyi@bytedance.com>
---
kernel/workqueue.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 97f37b5bae669..9f91480758288 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -7767,7 +7767,8 @@ void __init workqueue_init_early(void)
restrict_unbound_cpumask("workqueue.unbound_cpus", &wq_cmdline_cpumask);
cpumask_copy(wq_requested_unbound_cpumask, wq_unbound_cpumask);
-
+ cpumask_andnot(wq_isolated_cpumask, cpu_possible_mask,
+ housekeeping_cpumask(HK_TYPE_DOMAIN));
pwq_cache = KMEM_CACHE(pool_workqueue, SLAB_PANIC);
unbound_wq_update_pwq_attrs_buf = alloc_workqueue_attrs();
--
2.20.1
On Tue, Jun 17, 2025 at 12:42:16PM +0800, Chuyi Zhou wrote: > Now when isolcpus is enabled via the cmdline, wq_isolated_cpumask does > not include these isolated CPUs, even wq_unbound_cpumask has already > excluded them. It is only when we successfully configure an isolate cpuset > partition that wq_isolated_cpumask gets overwritten by > workqueue_unbound_exclude_cpumask(), including both the cmdline-specified > isolated CPUs and the isolated CPUs within the cpuset partitions. > > Fix this issue by initializing wq_isolated_cpumask properly in > workqueue_init_early(). > > Fixes: fe28f631fa94 ("workqueue: Add workqueue_unbound_exclude_cpumask() to exclude CPUs from wq_unbound_cpumask") > Signed-off-by: Chuyi Zhou <zhouchuyi@bytedance.com> Applied to wq/for-6.16-fixes. Thanks. -- tejun
On 6/17/25 12:42 AM, Chuyi Zhou wrote: > Now when isolcpus is enabled via the cmdline, wq_isolated_cpumask does > not include these isolated CPUs, even wq_unbound_cpumask has already > excluded them. It is only when we successfully configure an isolate cpuset > partition that wq_isolated_cpumask gets overwritten by > workqueue_unbound_exclude_cpumask(), including both the cmdline-specified > isolated CPUs and the isolated CPUs within the cpuset partitions. > > Fix this issue by initializing wq_isolated_cpumask properly in > workqueue_init_early(). > > Fixes: fe28f631fa94 ("workqueue: Add workqueue_unbound_exclude_cpumask() to exclude CPUs from wq_unbound_cpumask") > Signed-off-by: Chuyi Zhou <zhouchuyi@bytedance.com> > --- > kernel/workqueue.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/workqueue.c b/kernel/workqueue.c > index 97f37b5bae669..9f91480758288 100644 > --- a/kernel/workqueue.c > +++ b/kernel/workqueue.c > @@ -7767,7 +7767,8 @@ void __init workqueue_init_early(void) > restrict_unbound_cpumask("workqueue.unbound_cpus", &wq_cmdline_cpumask); > > cpumask_copy(wq_requested_unbound_cpumask, wq_unbound_cpumask); > - > + cpumask_andnot(wq_isolated_cpumask, cpu_possible_mask, > + housekeeping_cpumask(HK_TYPE_DOMAIN)); > pwq_cache = KMEM_CACHE(pool_workqueue, SLAB_PANIC); > > unbound_wq_update_pwq_attrs_buf = alloc_workqueue_attrs(); Right, the wq_isolated_cpumask isn't initialized properly. Thank for fixing that. Reviewed-by: Waiman Long <longman@redhat.com>
© 2016 - 2025 Red Hat, Inc.