diff options
Diffstat (limited to 'kernel/panic.c')
| -rw-r--r-- | kernel/panic.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/panic.c b/kernel/panic.c index c1fcaad337b7..4d9f55bf7d38 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-only  /*   *  linux/kernel/panic.c   * @@ -51,6 +52,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 +136,9 @@ 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); +  	if (panic_print & PANIC_PRINT_TASK_INFO)  		show_state(); @@ -277,7 +282,7 @@ void panic(const char *fmt, ...)  	 * panic() is not being callled from OOPS.  	 */  	debug_locks_off(); -	console_flush_on_panic(); +	console_flush_on_panic(CONSOLE_FLUSH_PENDING);  	panic_print_sys_info(); @@ -306,6 +311,8 @@ void panic(const char *fmt, ...)  		 * shutting down.  But if there is a chance of  		 * rebooting the system it will be rebooted.  		 */ +		if (panic_reboot_mode != REBOOT_UNDEFINED) +			reboot_mode = panic_reboot_mode;  		emergency_restart();  	}  #ifdef __sparc__ @@ -321,6 +328,9 @@ void panic(const char *fmt, ...)  	disabled_wait();  #endif  	pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf); + +	/* Do not scroll important messages printed above */ +	suppress_printk = 1;  	local_irq_enable();  	for (i = 0; ; i += PANIC_TIMER_STEP) {  		touch_softlockup_watchdog();  |