Commit 5ec8b591 authored by Sudeep Holla's avatar Sudeep Holla Committed by Will Deacon

arm64: topology: restrict updating siblings_masks to online cpus only

It's incorrect to iterate over all the possible CPUs to update the
sibling masks when any CPU is hotplugged in. In case the topology
siblings masks of the CPU is removed when is it hotplugged out, we
end up updating those masks when one of it's sibling is powered up
again. This will provide inconsistent view.

Further, since the CPU calling update_sibling_masks is yet to be set
online, there's no need to compare itself with each online CPU when
updating the siblings masks.

This patch restricts updation of sibling masks only for CPUs that are
already online. It also the drops the unnecessary cpuid check.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Tested-by: default avatarGanapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
Tested-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 5bdd2b3f
...@@ -231,7 +231,7 @@ static void update_siblings_masks(unsigned int cpuid) ...@@ -231,7 +231,7 @@ static void update_siblings_masks(unsigned int cpuid)
int cpu; int cpu;
/* update core and thread sibling masks */ /* update core and thread sibling masks */
for_each_possible_cpu(cpu) { for_each_online_cpu(cpu) {
cpu_topo = &cpu_topology[cpu]; cpu_topo = &cpu_topology[cpu];
if (cpuid_topo->llc_id == cpu_topo->llc_id) { if (cpuid_topo->llc_id == cpu_topo->llc_id) {
...@@ -243,15 +243,13 @@ static void update_siblings_masks(unsigned int cpuid) ...@@ -243,15 +243,13 @@ static void update_siblings_masks(unsigned int cpuid)
continue; continue;
cpumask_set_cpu(cpuid, &cpu_topo->core_sibling); cpumask_set_cpu(cpuid, &cpu_topo->core_sibling);
if (cpu != cpuid) cpumask_set_cpu(cpu, &cpuid_topo->core_sibling);
cpumask_set_cpu(cpu, &cpuid_topo->core_sibling);
if (cpuid_topo->core_id != cpu_topo->core_id) if (cpuid_topo->core_id != cpu_topo->core_id)
continue; continue;
cpumask_set_cpu(cpuid, &cpu_topo->thread_sibling); cpumask_set_cpu(cpuid, &cpu_topo->thread_sibling);
if (cpu != cpuid) cpumask_set_cpu(cpu, &cpuid_topo->thread_sibling);
cpumask_set_cpu(cpu, &cpuid_topo->thread_sibling);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment