Re: [PATCH v2 1/4] sys_info: add helper for callers that handle all_bt

From: Petr Mladek

Date: Thu Jun 25 2026 - 10:04:02 EST


On Tue 2026-06-23 15:34:58, Bradley Morgan wrote:
> Some callers handle SYS_INFO_ALL_BT themselves before calling sys_info().
> Add a helper that strips that bit without turning an all_bt only mask into
> a kernel_sys_info fallback.
>
> Signed-off-by: Bradley Morgan <include@xxxxxxxxx>
> ---
> 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_SYSCTL
> diff --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: