Re: [PATCH v2 1/4] sys_info: add helper for callers that handle all_bt
From: Bradley Morgan <hidden>
Date: 2026-06-25 14:43:37
Also in:
lkml, stable
On June 25, 2026 3:03:48 PM GMT+01:00, Petr Mladek [off-list ref] wrote:
quoted hunk ↗ jump to hunk
On Tue 2026-06-23 15:34:58, Bradley Morgan wrote:quoted
Some callers handle SYS_INFO_ALL_BT themselves before callingsys_info().quoted
Add a helper that strips that bit without turning an all_bt only maskintoquoted
a kernel_sys_info fallback. Signed-off-by: Bradley Morgan <redacted> --- Changes since v1: - New patch for the shared helper suggested by Petr. include/linux/sys_info.h | 1 + lib/sys_info.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+)diff --git a/include/linux/sys_info.h b/include/linux/sys_info.h index a5bc3ea3d44b..87a841ec7b6a 100644 --- a/include/linux/sys_info.h +++ b/include/linux/sys_info.h@@ -18,6 +18,7 @@ #define SYS_INFO_BLOCKED_TASKS 0x00000080 void sys_info(unsigned long si_mask); +void sys_info_without_all_bt(unsigned long si_mask); unsigned long sys_info_parse_param(char *str); #ifdef CONFIG_SYSCTLdiff --git a/lib/sys_info.c b/lib/sys_info.c index f32a06ec9ed4..6afd4c697633 100644 --- a/lib/sys_info.c +++ b/lib/sys_info.c@@ -164,3 +164,18 @@ void sys_info(unsigned long si_mask) { __sys_info(si_mask ? : kernel_si_mask); } + +void sys_info_without_all_bt(unsigned long si_mask) +{ + unsigned long dump_mask = si_mask & ~SYS_INFO_ALL_BT; + + /* + * 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); +}Sashiko AI pointed out that this function still migth trigger printing duplicate backtraces when (si_mask == 0). It calls sys_info(0) which falls back to kernel_si_mask which might have SYS_INFO_ALL_BT bit set, see https://sashiko.dev/#/patchset/9b8c96e291696815d3c7de5d3e199298dee0279d.1782228656.git.include%40grrlz.net => we need to eventually disable the SYS_INFO_ALL_BT bit also in kernel_si_mask. I think about creating a generic API which would allow to apply a filter mask, something like: From 02fc810a801adc0fc4d1fd14318415719bdfc656 Mon Sep 17 00:00:00 2001 From: Bradley Morgan <redacted> Date: Tue, 23 Jun 2026 15:34:58 +0000 Subject: [PATCH 1/4] sys_info: add helper for callers that print some sys_info on their own Some callers print some sys_info on their own before calling sys_info(). Add a helper which would allow to prevent a duplicated output. It is a bit tricky because kernel_si_mask should be used only when the call-specific si_mask is empty. But the duplicated output must be prevented there as well. Signed-off-by: Bradley Morgan <redacted> Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on system lockup") ? Fixes: a9af76a78760 ("watchdog: add sys_info sysctls to dump sys info on system lockup") --- include/linux/sys_info.h | 1 + lib/sys_info.c | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)diff --git a/include/linux/sys_info.h b/include/linux/sys_info.h index a5bc3ea3d44b..f1c2552ca3d1 100644 --- a/include/linux/sys_info.h +++ b/include/linux/sys_info.h@@ -18,6 +18,7 @@#define SYS_INFO_BLOCKED_TASKS 0x00000080 void sys_info(unsigned long si_mask); +void sys_info_with_filter(unsigned long si_mask, unsigned long si_ignore_mask); unsigned long sys_info_parse_param(char *str); #ifdef CONFIG_SYSCTLdiff --git a/lib/sys_info.c b/lib/sys_info.c index f32a06ec9ed4..d411fee10415 100644 --- a/lib/sys_info.c +++ b/lib/sys_info.c@@ -136,8 +136,10 @@ static int __init sys_info_sysctl_init(void)subsys_initcall(sys_info_sysctl_init); #endif -static void __sys_info(unsigned long si_mask) +static void __sys_info(unsigned long si_mask, unsigned long si_ignore_mask) { + si_mask &= ~si_ignore_mask; + if (si_mask & SYS_INFO_TASKS) show_state();@@ -160,7 +162,21 @@ static void __sys_info(unsigned long si_mask)show_state_filter(TASK_UNINTERRUPTIBLE); } +void sys_info_with_filter(unsigned long si_mask, unsigned long si_ignore_mask) +{ + unsigned long dump_mask = si_mask & ~si_ignore_mask; + + /* + * Do not fall back to kernel_si_mask when the caller context + * required only the ignored information. + */ + if (si_mask && !dump_mask) + return; + + __sys_info(dump_mask ? : kernel_si_mask, si_ignore_mask); +} + void sys_info(unsigned long si_mask) { - __sys_info(si_mask ? : kernel_si_mask); + sys_info_with_filter(si_mask, 0); } The next patches might use sys_info_with_filter(si_mask, SYS_INFO_ALL_BT) instead of sys_info_without_all_bt(si_mask). Feel free to bike shed about the function name. Also I am not sure whether to pass the filter as bits to filter or already the complement (~mask). Best Regards, Petr
Okay petr, so, The whole V3 situation.. I have to - Add (or modify) your suggestion - Add fengs reviewed by tag - and find a more neutral fixes tag - And also add Cc stable to patch 1 Ill work on V4 today. Thanks!