Hello Srikar, On 12/10/26 9:25 pm, Srikar Dronamraju wrote:
When cores are added while the system is running in a lower SMT mode, some threads of those cores remain offline. Moving the system to a higher SMT mode later fails to online those threads.For example, on a system with four cores: 1. ppc64_cpu --smt=off 2. nproc expected: 4 3. ppc64_cpu --smt expected/actual: "SMT is off" 4. drmgr -c cpu -a -q 4 5. ppc64_cpu --smt expected/actual: "SMT is off" 6. ppc64_cpu --smt=8 7. ppc64_cpu --smt expected: SMT=8 actual: SMT=1: 4-7; SMT=8: 0-3 8. nproc expected: 64 actual: 36 Post commit d1099e2276df ("powerpc/pseries: Honour current SMT state when DLPAR onlining CPUs"), when new CPUs are added, the CPU-to-node mapping is currently updated only for CPUs that are immediately onlined. CPUs that are made present but remain offline due to the current SMT mode therefore do not get a CPU-to-node mapping. When those CPUs are subsequently onlined after switching to a higher SMT mode, the online operation fails because the required CPU-to-node mapping is missing. Update the CPU-to-node mapping before applying the SMT restrictions so that all newly present CPUs have a node mapping, including CPUs that remain offline in the current SMT mode. Fixes: d1099e2276df ("powerpc/pseries: Honour current SMT state when DLPAR onlining CPUs") Reported-by: Samir Mulani <[email protected]> Signed-off-by: Srikar Dronamraju <[email protected]> --- arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index bc6926dbf148..b5dc942eec63 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c @@ -402,6 +402,7 @@ static int dlpar_online_cpu(struct device_node *dn) if (get_hard_smp_processor_id(cpu) != thread) continue;+ find_and_update_cpu_nid(cpu);if (!topology_is_primary_thread(cpu)) { if (cpu_smt_control != CPU_SMT_ENABLED) break; @@ -410,7 +411,6 @@ static int dlpar_online_cpu(struct device_node *dn) }cpu_maps_update_done();- find_and_update_cpu_nid(cpu); rc = device_online(get_cpu_device(cpu)); if (rc) { dlpar_offline_cpu(dn);
I have verified the patch, and no issues were observed during testing. The patch has been tested successfully.
Please add the following Tested-by tag: Tested-by: Samir Mulani <[email protected]> Thank you for the fix! Regards, Samir
