[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251119124449.1149616-18-sshegde@linux.ibm.com>
Date: Wed, 19 Nov 2025 18:14:49 +0530
From: Shrikanth Hegde <sshegde@...ux.ibm.com>
To: linux-kernel@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org
Cc: sshegde@...ux.ibm.com, mingo@...hat.com, peterz@...radead.org,
juri.lelli@...hat.com, vincent.guittot@...aro.org, tglx@...utronix.de,
yury.norov@...il.com, maddy@...ux.ibm.com, srikar@...ux.ibm.com,
gregkh@...uxfoundation.org, pbonzini@...hat.com, seanjc@...gle.com,
kprateek.nayak@....com, vschneid@...hat.com, iii@...ux.ibm.com,
huschle@...ux.ibm.com, rostedt@...dmis.org, dietmar.eggemann@....com,
christophe.leroy@...roup.eu
Subject: [PATCH 17/17] sysfs: disable arch handling if paravirt file being written
Arch specific code can update the mask based on the steal time. For
debugging it is desired to overwrite the arch logic. Do that with this
debug patch.
Signed-off-by: Shrikanth Hegde <sshegde@...ux.ibm.com>
---
This isn't meant to be merged. It is debug patch helping the previous
one for easier debugging.
arch/powerpc/platforms/pseries/lpar.c | 3 +++
drivers/base/cpu.c | 2 ++
include/linux/sched.h | 4 ++++
kernel/sched/core.c | 1 +
4 files changed, 10 insertions(+)
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 090e5c48243b..04bc75e22e7b 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -681,6 +681,9 @@ static void process_steal(int cpu)
unsigned long steal = 0;
unsigned int i;
+ if (static_branch_unlikely(&disable_arch_paravirt_handling))
+ return;
+
if (!should_cpu_process_steal(cpu))
return;
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index 766584c85051..06a11a69b7c0 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -403,7 +403,9 @@ static ssize_t paravirt_store(struct device *dev,
/* No more paravirt cpus */
if (cpumask_empty(temp_mask)) {
cpumask_copy((struct cpumask *)&__cpu_paravirt_mask, temp_mask);
+ static_branch_disable(&disable_arch_paravirt_handling);
} else {
+ static_branch_enable(&disable_arch_paravirt_handling);
cpumask_copy((struct cpumask *)&__cpu_paravirt_mask, temp_mask);
/* Enable tick on nohz_full cpu */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 3628edd1468b..1afa5dd5b0ae 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2427,4 +2427,8 @@ extern void migrate_enable(void);
DEFINE_LOCK_GUARD_0(migrate, migrate_disable(), migrate_enable())
+#ifdef CONFIG_PARAVIRT
+DECLARE_STATIC_KEY_FALSE(disable_arch_paravirt_handling);
+#endif
+
#endif
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 65c247c24191..b65a9898c694 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -10873,6 +10873,7 @@ void sched_change_end(struct sched_change_ctx *ctx)
#ifdef CONFIG_PARAVIRT
struct cpumask __cpu_paravirt_mask __read_mostly;
EXPORT_SYMBOL(__cpu_paravirt_mask);
+DEFINE_STATIC_KEY_FALSE(disable_arch_paravirt_handling);
static DEFINE_PER_CPU(struct cpu_stop_work, pv_push_task_work);
--
2.47.3
Powered by blists - more mailing lists