aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNathan Fontenot <nfont@linux.vnet.ibm.com>2015-04-29 21:42:06 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2015-04-30 23:47:24 -0400
commitf32393c943e297b8ae180c8f83d81a156c7d0412 (patch)
tree5a3ff4a1c86aee07da2c65264068912ea91035f9 /arch
parent2fa30fe957f3b3599a2f75688405495771877c14 (diff)
powerpc/pseries: Correct cpu affinity for dlpar added cpus
The incorrect ordering of operations during cpu dlpar add results in invalid affinity for the cpu being added. The ibm,associativity property in the device tree is populated with all zeroes for the added cpu which results in invalid affinity mappings and all cpus appear to belong to node 0. This occurs because rtas configure-connector is called prior to making the rtas set-indicator calls. Phyp does not assign affinity information for a cpu until the rtas set-indicator calls are made to set the isolation and allocation state. Correct the order of operations to make the rtas set-indicator calls (done in dlpar_acquire_drc) before calling rtas configure-connector. Fixes: 1a8061c46c46 ("powerpc/pseries: Add kernel based CPU DLPAR handling") Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/platforms/pseries/dlpar.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
index b4b11096ea8b..019d34aaf054 100644
--- a/arch/powerpc/platforms/pseries/dlpar.c
+++ b/arch/powerpc/platforms/pseries/dlpar.c
@@ -412,6 +412,10 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count)
412 if (rc) 412 if (rc)
413 return -EINVAL; 413 return -EINVAL;
414 414
415 rc = dlpar_acquire_drc(drc_index);
416 if (rc)
417 return -EINVAL;
418
415 parent = of_find_node_by_path("/cpus"); 419 parent = of_find_node_by_path("/cpus");
416 if (!parent) 420 if (!parent)
417 return -ENODEV; 421 return -ENODEV;
@@ -422,12 +426,6 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count)
422 426
423 of_node_put(parent); 427 of_node_put(parent);
424 428
425 rc = dlpar_acquire_drc(drc_index);
426 if (rc) {
427 dlpar_free_cc_nodes(dn);
428 return -EINVAL;
429 }
430
431 rc = dlpar_attach_node(dn); 429 rc = dlpar_attach_node(dn);
432 if (rc) { 430 if (rc) {
433 dlpar_release_drc(drc_index); 431 dlpar_release_drc(drc_index);