kernel/workqueue: Bind rescuer to unbound cpumask for WQ_UNBOUND
authorJuri Lelli <juri.lelli@redhat.com>
Tue, 16 Jan 2024 16:19:27 +0000 (17:19 +0100)
committerTejun Heo <tj@kernel.org>
Tue, 16 Jan 2024 18:47:30 +0000 (08:47 -1000)
At the time they are created unbound workqueues rescuers currently use
cpu_possible_mask as their affinity, but this can be too wide in case a
workqueue unbound mask has been set as a subset of cpu_possible_mask.

Make new rescuers use their associated workqueue unbound cpumask from
the start.

Signed-off-by: Juri Lelli <juri.lelli@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c

index 8d9dec14b9bb83e1a7240dc5dca0155e5938e314..ed442cefea7c4bed7b5379dd09994acca7deaac9 100644 (file)
@@ -4652,7 +4652,10 @@ static int init_rescuer(struct workqueue_struct *wq)
        }
 
        wq->rescuer = rescuer;
-       kthread_bind_mask(rescuer->task, cpu_possible_mask);
+       if (wq->flags & WQ_UNBOUND)
+               kthread_bind_mask(rescuer->task, wq->unbound_attrs->cpumask);
+       else
+               kthread_bind_mask(rescuer->task, cpu_possible_mask);
        wake_up_process(rescuer->task);
 
        return 0;