The patch titled Subject: panic: add an option to replay all the printk message in buffer has been added to the -mm tree. Its filename is panic-add-an-option-to-replay-all-the-printk-message-in-buffer.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/panic-add-an-option-to-replay-all-the-printk-message-in-buffer.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/panic-add-an-option-to-replay-all-the-printk-message-in-buffer.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Feng Tang <feng.tang@xxxxxxxxx> Subject: panic: add an option to replay all the printk message in buffer Currently on panic, kernel will lower the loglevel and print out pending printk msg only with console_flush_on_panic(). Add an option for users to configure the "panic_print" to replay all dmesg in buffer, some of which they may have never seen due to the loglevel setting, which will help panic debugging . Link: http://lkml.kernel.org/r/1556095872-36838-1-git-send-email-feng.tang@xxxxxxxxx Signed-off-by: Feng Tang <feng.tang@xxxxxxxxx> Cc: Aaro Koskinen <aaro.koskinen@xxxxxxxxx> Cc: Petr Mladek <pmladek@xxxxxxxx> Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> Cc: Sergey Senozhatsky <sergey.senozhatsky.work@xxxxxxxxx> Cc: Kees Cook <keescook@xxxxxxxxxxxx> Cc: Borislav Petkov <bp@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- Documentation/admin-guide/kernel-parameters.txt | 1 + arch/powerpc/kernel/traps.c | 2 +- include/linux/console.h | 7 ++++++- kernel/panic.c | 8 ++++++-- kernel/printk/printk.c | 8 +++++++- 5 files changed, 21 insertions(+), 5 deletions(-) --- a/arch/powerpc/kernel/traps.c~panic-add-an-option-to-replay-all-the-printk-message-in-buffer +++ a/arch/powerpc/kernel/traps.c @@ -179,7 +179,7 @@ extern void panic_flush_kmsg_end(void) kmsg_dump(KMSG_DUMP_PANIC); bust_spinlocks(0); debug_locks_off(); - console_flush_on_panic(); + console_flush_on_panic(CONSOLE_FLUSH_PENDING); } static unsigned long oops_begin(struct pt_regs *regs) --- a/Documentation/admin-guide/kernel-parameters.txt~panic-add-an-option-to-replay-all-the-printk-message-in-buffer +++ a/Documentation/admin-guide/kernel-parameters.txt @@ -3145,6 +3145,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(). --- a/include/linux/console.h~panic-add-an-option-to-replay-all-the-printk-message-in-buffer +++ a/include/linux/console.h @@ -166,6 +166,11 @@ struct console { extern int console_set_on_cmdline; extern struct console *early_console; +enum con_flush_mode { + CONSOLE_FLUSH_PENDING, + CONSOLE_REPLAY_ALL, +}; + extern int add_preferred_console(char *name, int idx, char *options); extern void register_console(struct console *); extern int unregister_console(struct console *); @@ -175,7 +180,7 @@ extern int console_trylock(void); extern void console_unlock(void); extern void console_conditional_schedule(void); extern void console_unblank(void); -extern void console_flush_on_panic(void); +extern void console_flush_on_panic(enum con_flush_mode mode); extern struct tty_driver *console_device(int *); extern void console_stop(struct console *); extern void console_start(struct console *); --- a/kernel/panic.c~panic-add-an-option-to-replay-all-the-printk-message-in-buffer +++ a/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,11 @@ EXPORT_SYMBOL(nmi_panic); static void panic_print_sys_info(void) { + if (panic_print & PANIC_PRINT_ALL_PRINTK_MSG) + console_flush_on_panic(CONSOLE_REPLAY_ALL); + else + console_flush_on_panic(CONSOLE_FLUSH_PENDING); + if (panic_print & PANIC_PRINT_TASK_INFO) show_state(); @@ -277,8 +283,6 @@ void panic(const char *fmt, ...) * panic() is not being callled from OOPS. */ debug_locks_off(); - console_flush_on_panic(); - panic_print_sys_info(); if (!panic_blink) --- a/kernel/printk/printk.c~panic-add-an-option-to-replay-all-the-printk-message-in-buffer +++ a/kernel/printk/printk.c @@ -2535,10 +2535,11 @@ void console_unblank(void) /** * console_flush_on_panic - flush console content on panic + * @mode: flush all messages in buffer or just the pending ones * * Immediately output all pending messages no matter what. */ -void console_flush_on_panic(void) +void console_flush_on_panic(enum con_flush_mode mode) { /* * If someone else is holding the console lock, trylock will fail @@ -2549,6 +2550,11 @@ void console_flush_on_panic(void) */ console_trylock(); console_may_schedule = 0; + + if (mode == CONSOLE_REPLAY_ALL) { + console_seq = log_first_seq; + console_idx = log_first_idx; + } console_unlock(); } _ Patches currently in -mm which might be from feng.tang@xxxxxxxxx are panic-avoid-the-extra-noise-dmesg.patch panic-add-an-option-to-replay-all-the-printk-message-in-buffer.patch