mirror of
https://github.com/torvalds/linux.git
synced 2026-03-13 22:36:17 +01:00
workqueue: Let DISASSOCIATED workers follow unbound wq cpumask changes
When workqueue cpumask changes are committed, the DISASSOCIATED workers affinity is not touched and this might be a problem down the line for isolated setups when the DISASSOCIATED pools still have works to run after the cpu is offline. Make sure the workers' affinity is updated every time a workqueue cpumask changes, so these workers can't break isolation. Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Waiman Long <longman@redhat.com> Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
e36bce4466
commit
8ac4dbe7dd
1 changed files with 13 additions and 0 deletions
|
|
@ -6926,6 +6926,10 @@ static int workqueue_apply_unbound_cpumask(const cpumask_var_t unbound_cpumask)
|
|||
}
|
||||
|
||||
if (!ret) {
|
||||
int cpu;
|
||||
struct worker_pool *pool;
|
||||
struct worker *worker;
|
||||
|
||||
mutex_lock(&wq_pool_attach_mutex);
|
||||
cpumask_copy(wq_unbound_cpumask, unbound_cpumask);
|
||||
/* rescuer needs to respect cpumask changes when it is not attached */
|
||||
|
|
@ -6933,6 +6937,15 @@ static int workqueue_apply_unbound_cpumask(const cpumask_var_t unbound_cpumask)
|
|||
if (wq->rescuer && !wq->rescuer->pool)
|
||||
unbind_worker(wq->rescuer);
|
||||
}
|
||||
/* DISASSOCIATED worker needs to respect wq_unbound_cpumask */
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_cpu_worker_pool(pool, cpu) {
|
||||
if (!(pool->flags & POOL_DISASSOCIATED))
|
||||
continue;
|
||||
for_each_pool_worker(worker, pool)
|
||||
unbind_worker(worker);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&wq_pool_attach_mutex);
|
||||
}
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue