Thread (11 messages) 11 messages, 3 authors, 2017-08-24

Re: [PATCH 1/2] powerpc/workqueue: update list of possible CPUs

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2017-08-22 01:41:45
Also in: linuxppc-dev, lkml

Tejun Heo [off-list ref] writes:
On Mon, Aug 21, 2017 at 03:49:50PM +0200, Laurent Vivier wrote:
quoted
In wq_numa_init() a list of NUMA nodes with their list of possible CPUs
is built.

Unfortunately, on powerpc, the Firmware is only able to provide the
node of a CPU if the CPU is present. So, in our case (possible CPU)
CPU ids are known, but as the CPU is not present, the node id is
unknown and all the unplugged CPUs are attached to node 0.
This is something powerpc needs to fix.
There is no way for us to fix it.

At boot, for possible but not present CPUs, we have no way of knowing
the CPU <-> node mapping, firmware simply doesn't tell us.
Workqueue isn't the only one making this assumption. mm as a whole
assumes that CPU <-> node mapping is stable regardless of hotplug
events.
At least in this case I don't think the mapping changes, it's just we
don't know the mapping at boot.

Currently we have to report possible but not present CPUs as belonging
to node 0, because otherwise we trip this helpful piece of code:

	for_each_possible_cpu(cpu) {
		node = cpu_to_node(cpu);
		if (WARN_ON(node == NUMA_NO_NODE)) {
			pr_warn("workqueue: NUMA node mapping not available for cpu%d, disabling NUMA support\n", cpu);
			/* happens iff arch is bonkers, let's just proceed */
			return;
		}

But if we remove that, we could then accurately report NUMA_NO_NODE at
boot, and then update the mapping when the CPU is hotplugged.

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help