[PATCH v2 3/4] powerpc/topology: Update arch_llc_mask based llc_override

From: Shrikanth Hegde

Date: Fri Oct 23 2026 - 09:18:12 EST


Update the arch_llc_mask passed for building the cache aware scheduling
data structures such as llc_id etc.

Since llc_override is kernel parameter, this helps to keep the
arch_llc_mask stable after boot which in turn keeps llc_id consistent,
since llc_id are not updated even on rebuilding the sched domains.

Signed-off-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
---
arch/powerpc/include/asm/topology.h | 8 ++------
arch/powerpc/kernel/smp.c | 19 +++++++++++++++++++
2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
index 44ec416fa489..e1ca91d9b2c2 100644
--- a/arch/powerpc/include/asm/topology.h
+++ b/arch/powerpc/include/asm/topology.h
@@ -135,12 +135,8 @@ struct cpumask *cpu_coregroup_mask(int cpu);
const struct cpumask *cpu_die_mask(int cpu);
int cpu_die_id(int cpu);

-/*
- * Points to where the LLC is. On power9 this will point at CACHE
- * domain, On others it will point to SMT domain. In all cases
- * cpu_l2_cache_mask points to where LLC is
- */
-#define arch_llc_mask(cpu) cpu_l2_cache_mask(cpu)
+const struct cpumask *arch_llc_mask(int cpu);
+#define arch_llc_mask arch_llc_mask

#ifdef CONFIG_PPC64
#include <asm/smp.h>
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index ca1821dedc98..4ece21abb1c4 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1099,6 +1099,25 @@ static int __init set_llc_override(char *str)
}
__setup("llc_override=", set_llc_override);

+/*
+ * Points to where the LLC is. On power9 this will point at CACHE
+ * domain, On others it will point to SMT domain. In all cases
+ * cpu_l2_cache_mask points to where LLC is.
+ *
+ * If there is llc_override set, return the appropriate mask
+ */
+const struct cpumask *arch_llc_mask(int cpu)
+{
+ switch (READ_ONCE(llc_override)) {
+ case LLC_OVERRIDE_MC:
+ return cpu_coregroup_mask(cpu);
+ case LLC_OVERRIDE_PKG:
+ return cpu_node_mask(cpu);
+ default:
+ return cpu_l2_cache_mask(cpu);
+ }
+}
+
static int __init init_big_cores(void)
{
int cpu;
--
2.52.0