>From c3fc955809adab8f497cdc7581e67e1fa29d6517 Mon Sep 17 00:00:00 2001 From: Sergey Senozhatsky Date: Wed, 30 Dec 2015 20:39:12 +0900 Subject: [PATCH 1/2] printk: introduce console_sync_mode console_sync_mode() should be called early in panic() to switch printk from async mode to sync. Otherwise, STOP IPIs can arrive to other CPUs too late and those CPUs will see oops_in_progress being 0 again. --- include/linux/console.h | 1 + kernel/panic.c | 1 + kernel/printk/printk.c | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/include/linux/console.h b/include/linux/console.h index bd19434..f068985 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -150,6 +150,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_sync_mode(void); extern struct tty_driver *console_device(int *); extern void console_stop(struct console *); extern void console_start(struct console *); diff --git a/kernel/panic.c b/kernel/panic.c index b333380..04c8ff4 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -117,6 +117,7 @@ void panic(const char *fmt, ...) if (old_cpu != PANIC_CPU_INVALID && old_cpu != this_cpu) panic_smp_self_stop(); + console_sync_mode(); console_verbose(); bust_spinlocks(1); va_start(args, fmt); diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index de9d31b..47a70a2 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2501,6 +2501,11 @@ void console_unblank(void) console_unlock(); } +void console_sync_mode(void) +{ + printk_sync = true; +} + /* * Return the console tty driver structure and its associated index */ -- 2.6.4