Currently on panic, kernel will lower the loglevel and print out new printk msg only. With this patch, user can configure the "panic_print" to see all dmesg in buffer, some of which they may have never seen due to the loglevel setting.
Signed-off-by: Feng Tang <feng.t...@intel.com> --- Documentation/admin-guide/kernel-parameters.txt | 1 + kernel/panic.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 2b8ee90..7b15c94 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -3135,6 +3135,7 @@ bit 2: print timer info bit 3: print locks info if CONFIG_LOCKDEP is on bit 4: print ftrace buffer + bit 5: print all printk messages in buffer panic_on_warn panic() instead of WARN(). Useful to cause kdump on a WARN(). diff --git a/kernel/panic.c b/kernel/panic.c index fb77e01..afe023e 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -51,6 +51,7 @@ EXPORT_SYMBOL_GPL(panic_timeout); #define PANIC_PRINT_TIMER_INFO 0x00000004 #define PANIC_PRINT_LOCK_INFO 0x00000008 #define PANIC_PRINT_FTRACE_INFO 0x00000010 +#define PANIC_PRINT_ALL_PRINTK_MSG 0x00000020 unsigned long panic_print; ATOMIC_NOTIFIER_HEAD(panic_notifier_list); @@ -134,6 +135,13 @@ EXPORT_SYMBOL(nmi_panic); static void panic_print_sys_info(void) { + bool flush_all_dmesg = false; + + if (panic_print & PANIC_PRINT_ALL_PRINTK_MSG) + flush_all_dmesg = true; + + console_flush_on_panic(flush_all_dmesg); + if (panic_print & PANIC_PRINT_TASK_INFO) show_state(); @@ -277,7 +285,6 @@ void panic(const char *fmt, ...) * panic() is not being callled from OOPS. */ debug_locks_off(); - console_flush_on_panic(false); panic_print_sys_info(); -- 2.7.4