arch_fix_phys_package_id() will use the slot number provided by ACPI, then we can get the right value in the "physical id" field of /proc/cpuinfo.
Signed-off-by: Hanjun Guo hanjun.guo@linaro.org --- arch/arm/include/asm/topology.h | 1 + arch/arm/kernel/topology.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/topology.h b/arch/arm/include/asm/topology.h index 5357eb1..932b75b 100644 --- a/arch/arm/include/asm/topology.h +++ b/arch/arm/include/asm/topology.h @@ -27,6 +27,7 @@ void init_cpu_topology(void); void store_cpu_topology(unsigned int cpuid); const struct cpumask *cpu_coregroup_mask(int cpu); int cluster_to_logical_mask(unsigned int socket_id, cpumask_t *cluster_mask); +extern void arch_fix_phys_package_id(int num, u32 slot);
#ifdef CONFIG_DISABLE_CPU_SCHED_DOMAIN_BALANCE /* Common values for CPUs */ diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c index 8df74d6..d951ae2 100644 --- a/arch/arm/kernel/topology.c +++ b/arch/arm/kernel/topology.c @@ -290,6 +290,16 @@ void store_cpu_topology(unsigned int cpuid) cpu_topology[cpuid].socket_id, mpidr); }
+void arch_fix_phys_package_id(int num, u32 slot) +{ +#ifdef CONFIG_SMP + struct cputopo_arm *cpuid_topo = &cpu_topology[num]; + + if (cpuid_topo->socket_id == -1) + cpuid_topo->socket_id = slot; +#endif +} +EXPORT_SYMBOL_GPL(arch_fix_phys_package_id);
#ifdef CONFIG_SCHED_HMP