[PATCH 38/38] MIPS: SGI-IP27: give each CPU its own topology package id
From: Imre Kaloz
Date: Thu Oct 01 2026 - 12:47:26 EST
cpu_data[].package is left at its zero-init default, so /proc/cpuinfo
and cpu_core_map treat every CPU in the system as one package, though
each PI slice is a separate physical processor. Derive it from the
klconfig nasid and physid node_scan_cpus() already records as the
CPU's slice.
Signed-off-by: Imre Kaloz <kaloz@xxxxxxxxxx>
---
arch/mips/sgi-ip27/ip27-smp.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
index fc4d9379a93e..c155582699d4 100644
--- a/arch/mips/sgi-ip27/ip27-smp.c
+++ b/arch/mips/sgi-ip27/ip27-smp.c
@@ -47,6 +47,13 @@ static int node_scan_cpus(nasid_t nasid, int highest)
set_cpu_possible(cpuid, true);
cputonasid(cpus_found) = nasid;
cputoslice(cpus_found) = acpu->cpu_info.physid;
+ /*
+ * Each PI slice is a separate physical CPU
+ * package; these processors have no on-die
+ * multiprocessing, so core is 0.
+ */
+ cpu_data[cpus_found].package =
+ (nasid << 2) | acpu->cpu_info.physid;
sn_cpu_info[cpus_found].p_speed =
acpu->cpu_speed;
cpus_found++;
@@ -85,6 +92,7 @@ void cpu_node_probe(void)
if (cputonasid(i) == master_nasid &&
cputoslice(i) == LOCAL_HUB_L(PI_CPU_NUM)) {
swap(sn_cpu_info[0], sn_cpu_info[i]);
+ swap(cpu_data[0].package, cpu_data[i].package);
break;
}
}
--
2.47.3