Re: [PATCH 2/2] workqueue:Fix affinity of an unbound worker of a node with 1 online CPU
From: Gautham R Shenoy <hidden>
Date: 2016-06-15 12:50:48
Also in:
lkml
On Wed, Jun 15, 2016 at 01:32:49PM +0200, Peter Zijlstra wrote:
On Wed, Jun 15, 2016 at 03:49:36PM +0530, Gautham R Shenoy wrote:quoted
Also, with the first patch in the series (which ensures that restore_unbound_workers are called *after* the new workers for the newly onlined CPUs are created) and without this one, you can reproduce this WARN_ON on both x86 and PPC by offlining all the CPUs of a node and bringing just one of them online.Ah good.quoted
I am not sure about that. The workqueue creates unbound workers for a node via wq_update_unbound_numa() whenever the first CPU of every node comes online. So that seems legitimate. It then tries to affine these workers to the cpumask of that node. Again this seems right. As an optimization, it does this only when the first CPU of the node comes online. Since this online CPU is not yet active, and since nr_cpus_allowed > 1, we will hit the WARN_ON().So I had another look and isn't the below a much simpler solution? It seems to work on my x86 with: for i in /sys/devices/system/cpu/cpu*/online ; do echo 0 > $i ; done for i in /sys/devices/system/cpu/cpu*/online ; do echo 1 > $i ; done without complaint.
Yup. This will work on PPC as well. We will no longer have the optimization in restore_unbound_workers_cpumask() but I suppose we don't lose much by resetting the affinity every time a CPU in the pool->attr->cpumask comes online. -- Thanks and Regards gautham.