Commit e561383a authored by Feng Tang's avatar Feng Tang Committed by Andrew Morton
Browse files

powerpc/watchdog: add support for hardlockup_sys_info sysctl

Commit a9af76a7 ("watchdog: add sys_info sysctls to dump sys info on
system lockup") adds 'hardlock_sys_info' systcl knob for general kernel
watchdog to control what kinds of system debug info to be dumped on
hardlockup.

Add similar support in powerpc watchdog code to make the sysctl knob more
general, which also fixes a compiling warning in general watchdog code
reported by 0day bot.

Link: https://lkml.kernel.org/r/20251231080309.39642-1-feng.tang@linux.alibaba.com


Fixes: a9af76a7 ("watchdog: add sys_info sysctls to dump sys info on system lockup")
Signed-off-by: default avatarFeng Tang <feng.tang@linux.alibaba.com>
Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512030920.NFKtekA7-lkp@intel.com/


Suggested-by: default avatarPetr Mladek <pmladek@suse.com>
Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f171b55f
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <linux/delay.h>
#include <linux/processor.h>
#include <linux/smp.h>
#include <linux/sys_info.h>

#include <asm/interrupt.h>
#include <asm/paca.h>
@@ -235,7 +236,11 @@ 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);

	if (!sysctl_hardlockup_all_cpu_backtrace) {
	if (sysctl_hardlockup_all_cpu_backtrace ||
	    (hardlockup_si_mask & SYS_INFO_ALL_BT)) {
		trigger_allbutcpu_cpu_backtrace(cpu);
		cpumask_clear(&wd_smp_cpus_ipi);
	} else {
		/*
		 * Try to trigger the stuck CPUs, unless we are going to
		 * get a backtrace on all of them anyway.
@@ -244,11 +249,9 @@ static void watchdog_smp_panic(int cpu)
			smp_send_nmi_ipi(c, wd_lockup_ipi, 1000000);
			__cpumask_clear_cpu(c, &wd_smp_cpus_ipi);
		}
	} else {
		trigger_allbutcpu_cpu_backtrace(cpu);
		cpumask_clear(&wd_smp_cpus_ipi);
	}

	sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
	if (hardlockup_panic)
		nmi_panic(NULL, "Hard LOCKUP");

@@ -415,9 +418,11 @@ DEFINE_INTERRUPT_HANDLER_NMI(soft_nmi_interrupt)

		xchg(&__wd_nmi_output, 1); // see wd_lockup_ipi

		if (sysctl_hardlockup_all_cpu_backtrace)
		if (sysctl_hardlockup_all_cpu_backtrace ||
		    (hardlockup_si_mask & SYS_INFO_ALL_BT))
			trigger_allbutcpu_cpu_backtrace(cpu);

		sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
		if (hardlockup_panic)
			nmi_panic(regs, "Hard LOCKUP");

+1 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ static inline void reset_hung_task_detector(void) { }
#if defined(CONFIG_HARDLOCKUP_DETECTOR)
extern void hardlockup_detector_disable(void);
extern unsigned int hardlockup_panic;
extern unsigned long hardlockup_si_mask;
#else
static inline void hardlockup_detector_disable(void) {}
#endif
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ unsigned int __read_mostly hardlockup_panic =
 * hard lockup is detected, it could be task, memory, lock etc.
 * Refer include/linux/sys_info.h for detailed bit definition.
 */
static unsigned long hardlockup_si_mask;
unsigned long hardlockup_si_mask;

#ifdef CONFIG_SYSFS