workqueue: Manually break affinity on hotplug
authorPeter Zijlstra <peterz@infradead.org>
Fri, 25 Sep 2020 13:45:11 +0000 (15:45 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Tue, 10 Nov 2020 17:38:58 +0000 (18:38 +0100)
Don't rely on the scheduler to force break affinity for us -- it will
stop doing that for per-cpu-kthreads.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Acked-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Daniel Bristot de Oliveira <bristot@redhat.com>
Link: https://lkml.kernel.org/r/20201023102346.464718669@infradead.org
kernel/workqueue.c

index 437935e..c71da2a 100644 (file)
@@ -4908,6 +4908,10 @@ static void unbind_workers(int cpu)
                pool->flags |= POOL_DISASSOCIATED;
 
                raw_spin_unlock_irq(&pool->lock);
+
+               for_each_pool_worker(worker, pool)
+                       WARN_ON_ONCE(set_cpus_allowed_ptr(worker->task, cpu_active_mask) < 0);
+
                mutex_unlock(&wq_pool_attach_mutex);
 
                /*