* [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt
@ 2026-06-20 22:01 Bradley Morgan
2026-06-22 3:23 ` Feng Tang
2026-06-23 12:37 ` Petr Mladek
0 siblings, 2 replies; 6+ messages in thread
From: Bradley Morgan @ 2026-06-20 22:01 UTC (permalink / raw)
To: Andrew Morton
Cc: Petr Mladek, Douglas Anderson, Mayank Rungta, Tejun Heo,
Feng Tang, ZhenguoYao, Shengming Hu, Joel Granados, linux-kernel
The watchdog handles SYS_INFO_ALL_BT itself. When that is the only
watchdog specific bit, sys_info(0) falls back to kernel_sys_info.
Skip sys_info() for that case.
Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on system lockup")
Signed-off-by: Bradley Morgan <include@grrlz.net>
---
kernel/watchdog.c | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 87dd5e0f6968..bad390a9b59e 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -54,6 +54,16 @@ static int __read_mostly watchdog_hardlockup_available;
struct cpumask watchdog_cpumask __read_mostly;
unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
+static void watchdog_sys_info(unsigned long si_mask)
+{
+ unsigned long dump_mask = si_mask & ~SYS_INFO_ALL_BT;
+
+ if (si_mask && !dump_mask)
+ return;
+
+ sys_info(dump_mask);
+}
+
#ifdef CONFIG_HARDLOCKUP_DETECTOR
# ifdef CONFIG_SMP
@@ -208,6 +218,7 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
{
int hardlockup_all_cpu_backtrace;
unsigned int this_cpu;
+ unsigned long si_mask;
unsigned long flags;
if (per_cpu(watchdog_hardlockup_touched, cpu)) {
@@ -216,7 +227,8 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
return;
}
- hardlockup_all_cpu_backtrace = (hardlockup_si_mask & SYS_INFO_ALL_BT) ?
+ si_mask = READ_ONCE(hardlockup_si_mask);
+ hardlockup_all_cpu_backtrace = (si_mask & SYS_INFO_ALL_BT) ?
1 : sysctl_hardlockup_all_cpu_backtrace;
/*
* Check for a hardlockup by making sure the CPU's timer
@@ -286,7 +298,7 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
clear_bit_unlock(0, &hard_lockup_nmi_warn);
}
- sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
+ watchdog_sys_info(si_mask);
if (hardlockup_panic)
nmi_panic(regs, "Hard LOCKUP");
@@ -798,6 +810,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
struct pt_regs *regs = get_irq_regs();
int softlockup_all_cpu_backtrace;
int duration, thresh_count;
+ unsigned long si_mask;
unsigned long flags;
if (!watchdog_enabled)
@@ -809,7 +822,8 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
if (panic_in_progress())
return HRTIMER_NORESTART;
- softlockup_all_cpu_backtrace = (softlockup_si_mask & SYS_INFO_ALL_BT) ?
+ si_mask = READ_ONCE(softlockup_si_mask);
+ softlockup_all_cpu_backtrace = (si_mask & SYS_INFO_ALL_BT) ?
1 : sysctl_softlockup_all_cpu_backtrace;
watchdog_hardlockup_kick();
@@ -900,7 +914,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
}
add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
- sys_info(softlockup_si_mask & ~SYS_INFO_ALL_BT);
+ watchdog_sys_info(si_mask);
thresh_count = duration / get_softlockup_thresh();
if (softlockup_panic && thresh_count >= softlockup_panic)
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt
2026-06-20 22:01 [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt Bradley Morgan
@ 2026-06-22 3:23 ` Feng Tang
2026-06-22 6:30 ` Bradley Morgan
2026-06-23 12:37 ` Petr Mladek
1 sibling, 1 reply; 6+ messages in thread
From: Feng Tang @ 2026-06-22 3:23 UTC (permalink / raw)
To: Bradley Morgan
Cc: Andrew Morton, Petr Mladek, Douglas Anderson, Mayank Rungta,
Tejun Heo, ZhenguoYao, Shengming Hu, Joel Granados,
Michael Ellerman, Madhavan Srinivasan, Nicholas Piggin,
Christophe Leroy, linux-kernel
Hi,
On Sat, Jun 20, 2026 at 10:01:40PM +0000, Bradley Morgan wrote:
> The watchdog handles SYS_INFO_ALL_BT itself. When that is the only
> watchdog specific bit, sys_info(0) falls back to kernel_sys_info.
>
> Skip sys_info() for that case.
Thanks for the patch!
I would explain some about he intention of the global 'kernel_sys_info'
which was suggested by Andrew. One use case is, for kernel stability
issues, it could be panic, soft/hard lockup, task-hung etc, and we now
have different conrol knobs for them each, but with similar 'xxx_sys_info'
capability, and they actually need similar system info like all-cpu
dump, blocked processes dump, debug ftrace dump, using one central
'kernel_sys_info' could be very handy by avoiding setting many knobs.
And for debugging random issues, you can just add sys_info(0)
everywhere, and controll it by the existing 'kernel_si_mask'
btw, did you meet some issues with current code? If yes, could you
agive some more details ? IIUC, when 'kernel_si_mask' is not set
specifically, sys_info(0) is a nop.
Thanks,
Feng
> Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on system lockup")
> Signed-off-by: Bradley Morgan <include@grrlz.net>
> ---
> kernel/watchdog.c | 22 ++++++++++++++++++----
> 1 file changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/kernel/watchdog.c b/kernel/watchdog.c
> index 87dd5e0f6968..bad390a9b59e 100644
> --- a/kernel/watchdog.c
> +++ b/kernel/watchdog.c
> @@ -54,6 +54,16 @@ static int __read_mostly watchdog_hardlockup_available;
> struct cpumask watchdog_cpumask __read_mostly;
> unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
>
> +static void watchdog_sys_info(unsigned long si_mask)
> +{
> + unsigned long dump_mask = si_mask & ~SYS_INFO_ALL_BT;
> +
> + if (si_mask && !dump_mask)
> + return;
> +
> + sys_info(dump_mask);
> +}
> +
> #ifdef CONFIG_HARDLOCKUP_DETECTOR
>
> # ifdef CONFIG_SMP
> @@ -208,6 +218,7 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
> {
> int hardlockup_all_cpu_backtrace;
> unsigned int this_cpu;
> + unsigned long si_mask;
> unsigned long flags;
>
> if (per_cpu(watchdog_hardlockup_touched, cpu)) {
> @@ -216,7 +227,8 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
> return;
> }
>
> - hardlockup_all_cpu_backtrace = (hardlockup_si_mask & SYS_INFO_ALL_BT) ?
> + si_mask = READ_ONCE(hardlockup_si_mask);
> + hardlockup_all_cpu_backtrace = (si_mask & SYS_INFO_ALL_BT) ?
> 1 : sysctl_hardlockup_all_cpu_backtrace;
> /*
> * Check for a hardlockup by making sure the CPU's timer
> @@ -286,7 +298,7 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
> clear_bit_unlock(0, &hard_lockup_nmi_warn);
> }
>
> - sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
> + watchdog_sys_info(si_mask);
> if (hardlockup_panic)
> nmi_panic(regs, "Hard LOCKUP");
>
> @@ -798,6 +810,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
> struct pt_regs *regs = get_irq_regs();
> int softlockup_all_cpu_backtrace;
> int duration, thresh_count;
> + unsigned long si_mask;
> unsigned long flags;
>
> if (!watchdog_enabled)
> @@ -809,7 +822,8 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
> if (panic_in_progress())
> return HRTIMER_NORESTART;
>
> - softlockup_all_cpu_backtrace = (softlockup_si_mask & SYS_INFO_ALL_BT) ?
> + si_mask = READ_ONCE(softlockup_si_mask);
> + softlockup_all_cpu_backtrace = (si_mask & SYS_INFO_ALL_BT) ?
> 1 : sysctl_softlockup_all_cpu_backtrace;
>
> watchdog_hardlockup_kick();
> @@ -900,7 +914,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
> }
>
> add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
> - sys_info(softlockup_si_mask & ~SYS_INFO_ALL_BT);
> + watchdog_sys_info(si_mask);
> thresh_count = duration / get_softlockup_thresh();
>
> if (softlockup_panic && thresh_count >= softlockup_panic)
> --
> 2.53.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt
2026-06-22 3:23 ` Feng Tang
@ 2026-06-22 6:30 ` Bradley Morgan
2026-06-22 7:37 ` Feng Tang
0 siblings, 1 reply; 6+ messages in thread
From: Bradley Morgan @ 2026-06-22 6:30 UTC (permalink / raw)
To: Feng Tang
Cc: Andrew Morton, Petr Mladek, Douglas Anderson, Mayank Rungta,
Tejun Heo, ZhenguoYao, Shengming Hu, Joel Granados,
Michael Ellerman, Madhavan Srinivasan, Nicholas Piggin,
Christophe Leroy, linux-kernel
On June 22, 2026 4:23:00 AM GMT+01:00, Feng Tang
<feng.tang@linux.alibaba.com> wrote:
>Hi,
>
>On Sat, Jun 20, 2026 at 10:01:40PM +0000, Bradley Morgan wrote:
>> The watchdog handles SYS_INFO_ALL_BT itself. When that is the only
>> watchdog specific bit, sys_info(0) falls back to kernel_sys_info.
>>
>> Skip sys_info() for that case.
>
>Thanks for the patch!
>
>I would explain some about he intention of the global 'kernel_sys_info'
>which was suggested by Andrew. One use case is, for kernel stability
>issues, it could be panic, soft/hard lockup, task-hung etc, and we now
>have different conrol knobs for them each, but with similar 'xxx_sys_info'
>capability, and they actually need similar system info like all-cpu
>dump, blocked processes dump, debug ftrace dump, using one central
>'kernel_sys_info' could be very handy by avoiding setting many knobs.
>And for debugging random issues, you can just add sys_info(0)
>everywhere, and controll it by the existing 'kernel_si_mask'
>
>btw, did you meet some issues with current code? If yes, could you
>agive some more details ? IIUC, when 'kernel_si_mask' is not set
>specifically, sys_info(0) is a nop.
>
>Thanks,
>Feng
Feng!
I see what you are saying, but there is a "double ended sword"! :)
Unfortunately. The issue is where the watchdog specific mask is
explicitly set to ONLY all_bt for instance.
The watchdog only handles SYS_INFO_ALL_BT.
↓
so the later call becomes sys_info(0).
At that point sys_info() cannot tell that the caller had a nonzero
watchdog mask, and it falls back to kernel_sys_info.
Here is a example where this would be reached:
kernel.kernel_sys_info=tasks,mem kernel.hardlockup_sys_info=all_bt
a hard lockup still dumps tasks and memory through the global default.
I expected hardlockup_sys_info to override the global default once it
is explicitly set IMHO.
IF hardlockup_sys_info is empty..
This patch keeps the existing fallback! :)
So the **bug** is not sys_info(0) itself.
but the watchdog turning an explicit
all_bt ONLY mask into zero after handling all_bt locally.
What do you think Feng? Is this good to you? :)
Cheers!
>> Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on
>system lockup")
>> Signed-off-by: Bradley Morgan <include@grrlz.net>
>> ---
>> kernel/watchdog.c | 22 ++++++++++++++++++----
>> 1 file changed, 18 insertions(+), 4 deletions(-)
>>
>> diff --git a/kernel/watchdog.c b/kernel/watchdog.c
>> index 87dd5e0f6968..bad390a9b59e 100644
>> --- a/kernel/watchdog.c
>> +++ b/kernel/watchdog.c
>> @@ -54,6 +54,16 @@ static int __read_mostly
>watchdog_hardlockup_available;
>> struct cpumask watchdog_cpumask __read_mostly;
>> unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
>>
>> +static void watchdog_sys_info(unsigned long si_mask)
>> +{
>> + unsigned long dump_mask = si_mask & ~SYS_INFO_ALL_BT;
>> +
>> + if (si_mask && !dump_mask)
>> + return;
>> +
>> + sys_info(dump_mask);
>> +}
>> +
>> #ifdef CONFIG_HARDLOCKUP_DETECTOR
>>
>> # ifdef CONFIG_SMP
>> @@ -208,6 +218,7 @@ void watchdog_hardlockup_check(unsigned int cpu,
>struct pt_regs *regs)
>> {
>> int hardlockup_all_cpu_backtrace;
>> unsigned int this_cpu;
>> + unsigned long si_mask;
>> unsigned long flags;
>>
>> if (per_cpu(watchdog_hardlockup_touched, cpu)) {
>> @@ -216,7 +227,8 @@ void watchdog_hardlockup_check(unsigned int cpu,
>struct pt_regs *regs)
>> return;
>> }
>>
>> - hardlockup_all_cpu_backtrace = (hardlockup_si_mask & SYS_INFO_ALL_BT) ?
>> + si_mask = READ_ONCE(hardlockup_si_mask);
>> + hardlockup_all_cpu_backtrace = (si_mask & SYS_INFO_ALL_BT) ?
>> 1 : sysctl_hardlockup_all_cpu_backtrace;
>> /*
>> * Check for a hardlockup by making sure the CPU's timer
>> @@ -286,7 +298,7 @@ void watchdog_hardlockup_check(unsigned int cpu,
>struct pt_regs *regs)
>> clear_bit_unlock(0, &hard_lockup_nmi_warn);
>> }
>>
>> - sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
>> + watchdog_sys_info(si_mask);
>> if (hardlockup_panic)
>> nmi_panic(regs, "Hard LOCKUP");
>>
>> @@ -798,6 +810,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct
>hrtimer *hrtimer)
>> struct pt_regs *regs = get_irq_regs();
>> int softlockup_all_cpu_backtrace;
>> int duration, thresh_count;
>> + unsigned long si_mask;
>> unsigned long flags;
>>
>> if (!watchdog_enabled)
>> @@ -809,7 +822,8 @@ static enum hrtimer_restart watchdog_timer_fn(struct
>hrtimer *hrtimer)
>> if (panic_in_progress())
>> return HRTIMER_NORESTART;
>>
>> - softlockup_all_cpu_backtrace = (softlockup_si_mask & SYS_INFO_ALL_BT) ?
>> + si_mask = READ_ONCE(softlockup_si_mask);
>> + softlockup_all_cpu_backtrace = (si_mask & SYS_INFO_ALL_BT) ?
>> 1 : sysctl_softlockup_all_cpu_backtrace;
>>
>> watchdog_hardlockup_kick();
>> @@ -900,7 +914,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct
>hrtimer *hrtimer)
>> }
>>
>> add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
>> - sys_info(softlockup_si_mask & ~SYS_INFO_ALL_BT);
>> + watchdog_sys_info(si_mask);
>> thresh_count = duration / get_softlockup_thresh();
>>
>> if (softlockup_panic && thresh_count >= softlockup_panic)
>> --
>> 2.53.0
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt
2026-06-22 6:30 ` Bradley Morgan
@ 2026-06-22 7:37 ` Feng Tang
2026-06-22 14:51 ` Bradley Morgan
0 siblings, 1 reply; 6+ messages in thread
From: Feng Tang @ 2026-06-22 7:37 UTC (permalink / raw)
To: Bradley Morgan, Andrew Morton, Petr Mladek
Cc: Douglas Anderson, Mayank Rungta, Tejun Heo, ZhenguoYao,
Shengming Hu, Joel Granados, Michael Ellerman,
Madhavan Srinivasan, Nicholas Piggin, Christophe Leroy,
linux-kernel
On Mon, Jun 22, 2026 at 07:30:18AM +0100, Bradley Morgan wrote:
> On June 22, 2026 4:23:00 AM GMT+01:00, Feng Tang
> <feng.tang@linux.alibaba.com> wrote:
> >Hi,
> >
> >On Sat, Jun 20, 2026 at 10:01:40PM +0000, Bradley Morgan wrote:
> >> The watchdog handles SYS_INFO_ALL_BT itself. When that is the only
> >> watchdog specific bit, sys_info(0) falls back to kernel_sys_info.
> >>
> >> Skip sys_info() for that case.
> >
> >Thanks for the patch!
> >
> >I would explain some about he intention of the global 'kernel_sys_info'
> >which was suggested by Andrew. One use case is, for kernel stability
> >issues, it could be panic, soft/hard lockup, task-hung etc, and we now
> >have different conrol knobs for them each, but with similar 'xxx_sys_info'
> >capability, and they actually need similar system info like all-cpu
> >dump, blocked processes dump, debug ftrace dump, using one central
> >'kernel_sys_info' could be very handy by avoiding setting many knobs.
> >And for debugging random issues, you can just add sys_info(0)
> >everywhere, and controll it by the existing 'kernel_si_mask'
> >
> >btw, did you meet some issues with current code? If yes, could you
> >agive some more details ? IIUC, when 'kernel_si_mask' is not set
> >specifically, sys_info(0) is a nop.
> >
> >Thanks,
> >Feng
>
> Feng!
>
> I see what you are saying, but there is a "double ended sword"! :)
>
> Unfortunately. The issue is where the watchdog specific mask is
> explicitly set to ONLY all_bt for instance.
>
> The watchdog only handles SYS_INFO_ALL_BT.
>
> ↓
>
> so the later call becomes sys_info(0).
>
> At that point sys_info() cannot tell that the caller had a nonzero
> watchdog mask, and it falls back to kernel_sys_info.
>
>
> Here is a example where this would be reached:
>
> kernel.kernel_sys_info=tasks,mem kernel.hardlockup_sys_info=all_bt
>
> a hard lockup still dumps tasks and memory through the global default.
Thanks for providing the case. I cannot say this is not a valid case :),
so I'm not against your patch, and would listen to other developers'
opinions.
Thanks,
Feng
>
> I expected hardlockup_sys_info to override the global default once it
> is explicitly set IMHO.
>
> IF hardlockup_sys_info is empty..
>
> This patch keeps the existing fallback! :)
>
> So the **bug** is not sys_info(0) itself.
>
> but the watchdog turning an explicit
> all_bt ONLY mask into zero after handling all_bt locally.
>
> What do you think Feng? Is this good to you? :)
>
> Cheers!
>
> >> Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on
> >system lockup")
> >> Signed-off-by: Bradley Morgan <include@grrlz.net>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt
2026-06-22 7:37 ` Feng Tang
@ 2026-06-22 14:51 ` Bradley Morgan
0 siblings, 0 replies; 6+ messages in thread
From: Bradley Morgan @ 2026-06-22 14:51 UTC (permalink / raw)
To: Feng Tang, Andrew Morton, Petr Mladek
Cc: Douglas Anderson, Mayank Rungta, Tejun Heo, ZhenguoYao,
Shengming Hu, Joel Granados, Michael Ellerman,
Madhavan Srinivasan, Nicholas Piggin, Christophe Leroy,
linux-kernel
On June 22, 2026 8:37:51 AM GMT+01:00, Feng Tang
<feng.tang@linux.alibaba.com> wrote:
>On Mon, Jun 22, 2026 at 07:30:18AM +0100, Bradley Morgan wrote:
>> On June 22, 2026 4:23:00 AM GMT+01:00, Feng Tang
>> <feng.tang@linux.alibaba.com> wrote:
>> >Hi,
>> >
>> >On Sat, Jun 20, 2026 at 10:01:40PM +0000, Bradley Morgan wrote:
>> >> The watchdog handles SYS_INFO_ALL_BT itself. When that is the only
>> >> watchdog specific bit, sys_info(0) falls back to kernel_sys_info.
>> >>
>> >> Skip sys_info() for that case.
>> >
>> >Thanks for the patch!
>> >
>> >I would explain some about he intention of the global 'kernel_sys_info'
>> >which was suggested by Andrew. One use case is, for kernel stability
>> >issues, it could be panic, soft/hard lockup, task-hung etc, and we now
>> >have different conrol knobs for them each, but with similar
>'xxx_sys_info'
>> >capability, and they actually need similar system info like all-cpu
>> >dump, blocked processes dump, debug ftrace dump, using one central
>> >'kernel_sys_info' could be very handy by avoiding setting many knobs.
>> >And for debugging random issues, you can just add sys_info(0)
>> >everywhere, and controll it by the existing 'kernel_si_mask'
>> >
>> >btw, did you meet some issues with current code? If yes, could you
>> >agive some more details ? IIUC, when 'kernel_si_mask' is not set
>> >specifically, sys_info(0) is a nop.
>> >
>> >Thanks,
>> >Feng
>>
>> Feng!
>>
>> I see what you are saying, but there is a "double ended sword"! :)
>>
>> Unfortunately. The issue is where the watchdog specific mask is
>> explicitly set to ONLY all_bt for instance.
>>
>> The watchdog only handles SYS_INFO_ALL_BT.
>>
>> ↓
>>
>> so the later call becomes sys_info(0).
>>
>> At that point sys_info() cannot tell that the caller had a nonzero
>> watchdog mask, and it falls back to kernel_sys_info.
>>
>>
>> Here is a example where this would be reached:
>>
>> kernel.kernel_sys_info=tasks,mem kernel.hardlockup_sys_info=all_bt
>>
>> a hard lockup still dumps tasks and memory through the global default.
>
>Thanks for providing the case. I cannot say this is not a valid case :),
>so I'm not against your patch, and would listen to other developers'
>opinions.
>
>Thanks,
>Feng
Thanks Feng!
>>
>> I expected hardlockup_sys_info to override the global default once it
>> is explicitly set IMHO.
>>
>> IF hardlockup_sys_info is empty..
>>
>> This patch keeps the existing fallback! :)
>>
>> So the **bug** is not sys_info(0) itself.
>>
>> but the watchdog turning an explicit
>> all_bt ONLY mask into zero after handling all_bt locally.
>>
>> What do you think Feng? Is this good to you? :)
>>
>> Cheers!
>>
>> >> Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info
>on
>> >system lockup")
>> >> Signed-off-by: Bradley Morgan <include@grrlz.net>
>
Thanks!
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt
2026-06-20 22:01 [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt Bradley Morgan
2026-06-22 3:23 ` Feng Tang
@ 2026-06-23 12:37 ` Petr Mladek
1 sibling, 0 replies; 6+ messages in thread
From: Petr Mladek @ 2026-06-23 12:37 UTC (permalink / raw)
To: Bradley Morgan
Cc: Andrew Morton, Douglas Anderson, Mayank Rungta, Tejun Heo,
Feng Tang, ZhenguoYao, Shengming Hu, Joel Granados, linux-kernel
On Sat 2026-06-20 22:01:40, Bradley Morgan wrote:
> The watchdog handles SYS_INFO_ALL_BT itself. When that is the only
> watchdog specific bit, sys_info(0) falls back to kernel_sys_info.
Great catch!
> Skip sys_info() for that case.
>
> Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on system lockup")
> Signed-off-by: Bradley Morgan <include@grrlz.net>
> --- a/kernel/watchdog.c
> +++ b/kernel/watchdog.c
> @@ -54,6 +54,16 @@ static int __read_mostly watchdog_hardlockup_available;
> struct cpumask watchdog_cpumask __read_mostly;
> unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
>
Similar problem exists also in kernel/panic.c. It would make
sense to put this variant into lib/sys_info.c and use a generic name,
e.g. sys_info_without_all_bt().
> +static void watchdog_sys_info(unsigned long si_mask)
> +{
> + unsigned long dump_mask = si_mask & ~SYS_INFO_ALL_BT;
> +
This looks like an optimization. The real reason is not obvious.
It would deserve a comment, something like:
/*
* Do not call sys_info() when the caller context required
* only backtraces from all CPUs. Otherwise, sys_info()
* would fall back to the generic "kernel_si_mask".
*/
> + if (si_mask && !dump_mask)
> + return;
> +
> + sys_info(dump_mask);
> +}
Alternative solution would be to remove the custom
trigger_all*_cpu_backtrace() calls from both watchdog and panic
code and rely on sys_info() API. But it is not easy, especially
in panic().
Otherwise, the changes make sense.
Best Regards,
Petr
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-06-23 12:37 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-20 22:01 [PATCH 1/1] watchdog: avoid extra sys_info dumps for all_bt Bradley Morgan
2026-06-22 3:23 ` Feng Tang
2026-06-22 6:30 ` Bradley Morgan
2026-06-22 7:37 ` Feng Tang
2026-06-22 14:51 ` Bradley Morgan
2026-06-23 12:37 ` Petr Mladek
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.