Commit 46a4d679 authored by Lai Jiangshan's avatar Lai Jiangshan Committed by Tejun Heo
Browse files

workqueue: Avoid a false warning in unbind_workers()



Doing set_cpus_allowed_ptr() with wq_unbound_cpumask can be possible
fails and trigger the false warning.

Use cpu_possible_mask instead when wq_unbound_cpumask has no active CPUs.

It is very easy to trigger the warning:
  Set wq_unbound_cpumask to a small set of CPUs.
  Offline all the CPUs of wq_unbound_cpumask.
  Offline an extra CPU and trigger the warning.

Fixes: 10a5a651 ("workqueue: Restrict kworker in the offline CPU pool running on housekeeping CPUs")
Signed-off-by: default avatarLai Jiangshan <jiangshan.ljs@antgroup.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 8bee9dd9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -5001,7 +5001,10 @@ static void unbind_workers(int cpu)

		for_each_pool_worker(worker, pool) {
			kthread_set_per_cpu(worker->task, -1);
			if (cpumask_intersects(wq_unbound_cpumask, cpu_active_mask))
				WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task, wq_unbound_cpumask) < 0);
			else
				WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task, cpu_possible_mask) < 0);
		}

		mutex_unlock(&wq_pool_attach_mutex);