[PATCH 4/4] powerpc/topology: Rebuild sched domains on llc_override change

From: Shrikanth Hegde

Date: Mon Oct 12 2026 - 06:24:00 EST


On changing the llc_override, rebuild the sched domains.

For the rebuild to happen, indicate it to the scheduler that
complete rebuild of the sched domains need to happen
via arch_update_cpu_topology().

With this, llc_override functionality is complete.

For example, on CPU10,
domain0/name:SMT
domain1/name:MC
domain2/name:PKG

echo 0 > /sys/kernel/debug/powerpc/llc_override
SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_CPUCAPACITY SD_SHARE_LLC SD_PREFER_SIBLING
SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_PREFER_SIBLING
SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_PREFER_SIBLING

echo mc > /sys/kernel/debug/powerpc/llc_override
SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_CPUCAPACITY SD_SHARE_LLC SD_PREFER_SIBLING
SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_SHARE_LLC SD_PREFER_SIBLING
SD_BALANCE_NEWIDLE SD_BALANCE_EXEC SD_BALANCE_FORK SD_WAKE_AFFINE SD_PREFER_SIBLING

Signed-off-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
---
arch/powerpc/kernel/smp.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 4b6512d25f73..6a4ee7d3b8e5 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -37,6 +37,7 @@
#include <linux/clockchips.h>
#include <linux/kexec.h>
#include <linux/debugfs.h>
+#include <linux/cpuset.h>

#include <asm/ptrace.h>
#include <linux/atomic.h>
@@ -1863,6 +1864,16 @@ void __noreturn arch_cpu_idle_dead(void)

#endif

+int arch_update_cpu_topology(void)
+{
+ if (READ_ONCE(llc_override_changed)) {
+ WRITE_ONCE(llc_override_changed, 0);
+ return 1;
+ }
+
+ return 0;
+}
+
static ssize_t llc_override_get(struct file *file, char __user *ubuf,
size_t count, loff_t *ppos)
{
@@ -1909,10 +1920,10 @@ static ssize_t llc_override_set(struct file *file, const char __user *ubuf,
if (override != READ_ONCE(llc_override)) {
WRITE_ONCE(llc_override, override);
WRITE_ONCE(llc_override_changed, 1);
- pr_info("sched LLC override set to %s\n",
+ pr_info("sched LLC override set to %s. Rebuilding sched domains\n",
llc_override_str[override]);

- /* Will be calling rebuild sched domain in later patches */
+ rebuild_sched_domains();
}

mutex_unlock(&llc_override_mutex);
--
2.52.0