| From: Feng Tang <feng.tang@intel.com> |
| Subject: panic: add option to dump blocked tasks in panic_print |
| Date: Fri, 2 Feb 2024 21:20:42 +0800 |
| |
| For debugging kernel panics and other bugs, there is already an option of |
| panic_print to dump all tasks' call stacks. On today's large servers |
| running many containers, there could be thousands of tasks or more, and |
| this will print out huge amount of call stacks, taking a lot of time (for |
| serial console which is main target user case of panic_print). |
| |
| And in many cases, only those several tasks being blocked are key for the |
| panic, so add an option to only dump blocked tasks' call stacks. |
| |
| [akpm@linux-foundation.org: clarify documentation a little] |
| Link: https://lkml.kernel.org/r/20240202132042.3609657-1-feng.tang@intel.com |
| Signed-off-by: Feng Tang <feng.tang@intel.com> |
| Tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com> |
| Cc: Jonathan Corbet <corbet@lwn.net> |
| Cc: Josh Poimboeuf <jpoimboe@kernel.org> |
| Cc: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Cc: Randy Dunlap <rdunlap@infradead.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| Documentation/admin-guide/kernel-parameters.txt | 1 + |
| Documentation/admin-guide/sysctl/kernel.rst | 1 + |
| kernel/panic.c | 4 ++++ |
| 3 files changed, 6 insertions(+) |
| |
| --- a/Documentation/admin-guide/kernel-parameters.txt~panic-add-option-to-dump-blocked-tasks-in-panic_print |
| +++ a/Documentation/admin-guide/kernel-parameters.txt |
| @@ -4182,6 +4182,7 @@ |
| bit 4: print ftrace buffer |
| bit 5: print all printk messages in buffer |
| bit 6: print all CPUs backtrace (if available in the arch) |
| + bit 7: print only tasks in uninterruptible (blocked) state |
| *Be aware* that this option may print a _lot_ of lines, |
| so there are risks of losing older messages in the log. |
| Use this option carefully, maybe worth to setup a |
| --- a/Documentation/admin-guide/sysctl/kernel.rst~panic-add-option-to-dump-blocked-tasks-in-panic_print |
| +++ a/Documentation/admin-guide/sysctl/kernel.rst |
| @@ -853,6 +853,7 @@ bit 3 print locks info if ``CONFIG_LOCK |
| bit 4 print ftrace buffer |
| bit 5 print all printk messages in buffer |
| bit 6 print all CPUs backtrace (if available in the arch) |
| +bit 7 print only tasks in uninterruptible (blocked) state |
| ===== ============================================ |
| |
| So for example to print tasks and memory info on panic, user can:: |
| --- a/kernel/panic.c~panic-add-option-to-dump-blocked-tasks-in-panic_print |
| +++ a/kernel/panic.c |
| @@ -73,6 +73,7 @@ EXPORT_SYMBOL_GPL(panic_timeout); |
| #define PANIC_PRINT_FTRACE_INFO 0x00000010 |
| #define PANIC_PRINT_ALL_PRINTK_MSG 0x00000020 |
| #define PANIC_PRINT_ALL_CPU_BT 0x00000040 |
| +#define PANIC_PRINT_BLOCKED_TASKS 0x00000080 |
| unsigned long panic_print; |
| |
| ATOMIC_NOTIFIER_HEAD(panic_notifier_list); |
| @@ -227,6 +228,9 @@ static void panic_print_sys_info(bool co |
| |
| if (panic_print & PANIC_PRINT_FTRACE_INFO) |
| ftrace_dump(DUMP_ALL); |
| + |
| + if (panic_print & PANIC_PRINT_BLOCKED_TASKS) |
| + show_state_filter(TASK_UNINTERRUPTIBLE); |
| } |
| |
| void check_panic_on_warn(const char *origin) |
| _ |