[PATCH v2 3/4] powerpc/watchdog: avoid sys_info fallback for all_bt
From: Bradley Morgan
Date: Tue Jun 23 2026 - 11:40:07 EST
The powerpc watchdog prints all CPU backtraces itself. When the watchdog
mask contains only SYS_INFO_ALL_BT, stripping that bit leaves zero and
sys_info(0) falls back to kernel_sys_info.
Use sys_info_without_all_bt() so an explicit all_bt mask does not request
the global default.
Fixes: e561383a39ed ("powerpc/watchdog: add support for hardlockup_sys_info sysctl")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Bradley Morgan <include@xxxxxxxxx>
---
Changes since v1:
- Use the shared sys_info_without_all_bt() helper.
- Keep the powerpc watchdog change in its own patch.
arch/powerpc/kernel/watchdog.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/kernel/watchdog.c b/arch/powerpc/kernel/watchdog.c
index c40c69368476..813f9d48a6be 100644
--- a/arch/powerpc/kernel/watchdog.c
+++ b/arch/powerpc/kernel/watchdog.c
@@ -201,6 +201,7 @@ static bool set_cpu_stuck(int cpu)
static void watchdog_smp_panic(int cpu)
{
static cpumask_t wd_smp_cpus_ipi; // protected by reporting
+ unsigned long si_mask;
unsigned long flags;
u64 tb, last_reset;
int c;
@@ -236,8 +237,9 @@ static void watchdog_smp_panic(int cpu)
pr_emerg("CPU %d TB:%lld, last SMP heartbeat TB:%lld (%lldms ago)\n",
cpu, tb, last_reset, tb_to_ns(tb - last_reset) / 1000000);
+ si_mask = READ_ONCE(hardlockup_si_mask);
if (sysctl_hardlockup_all_cpu_backtrace ||
- (hardlockup_si_mask & SYS_INFO_ALL_BT)) {
+ (si_mask & SYS_INFO_ALL_BT)) {
trigger_allbutcpu_cpu_backtrace(cpu);
cpumask_clear(&wd_smp_cpus_ipi);
} else {
@@ -251,7 +253,7 @@ static void watchdog_smp_panic(int cpu)
}
}
- sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
+ sys_info_without_all_bt(si_mask);
if (hardlockup_panic)
nmi_panic(NULL, "Hard LOCKUP");
@@ -371,6 +373,7 @@ static void watchdog_timer_interrupt(int cpu)
DEFINE_INTERRUPT_HANDLER_NMI(soft_nmi_interrupt)
{
+ unsigned long si_mask;
unsigned long flags;
int cpu = raw_smp_processor_id();
u64 tb;
@@ -418,11 +421,12 @@ DEFINE_INTERRUPT_HANDLER_NMI(soft_nmi_interrupt)
xchg(&__wd_nmi_output, 1); // see wd_lockup_ipi
+ si_mask = READ_ONCE(hardlockup_si_mask);
if (sysctl_hardlockup_all_cpu_backtrace ||
- (hardlockup_si_mask & SYS_INFO_ALL_BT))
+ (si_mask & SYS_INFO_ALL_BT))
trigger_allbutcpu_cpu_backtrace(cpu);
- sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
+ sys_info_without_all_bt(si_mask);
if (hardlockup_panic)
nmi_panic(regs, "Hard LOCKUP");
--
2.53.0