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 <[email protected]> --- 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); +} -- 2.53.0
