diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c index fb1b37741952..5f8afaca8866 100644 --- a/kernel/printk/nbcon.c +++ b/kernel/printk/nbcon.c @@ -2005,7 +2005,8 @@ void nbcon_kdb_release(struct nbcon_write_context *wctxt) } /** - * nbcon_is_braille - Checks whether the nbcon write context is using Braille console + * nbcon_write_context_is_braille - Checks whether the nbcon write context + * is using Braille console * * @wctxt: checked nbcon write context * diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 6d3d18a50da7..bc3b9f6e404b 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -3862,7 +3862,7 @@ static int __init printk_set_kthreads_ready(void) return 0; } -early_initcall(printk_set_kthreads_ready); +subsys_initcall(printk_set_kthreads_ready); #endif /* CONFIG_PRINTK */ static int __read_mostly keep_bootcon; diff --git a/kernel/reboot.c b/kernel/reboot.c index d177d89fcc33..5b9691f45f5f 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -8,6 +8,7 @@ #define pr_fmt(fmt) "reboot: " fmt #include +#include #include #include #include @@ -94,6 +95,14 @@ void emergency_restart(void) { kmsg_dump(KMSG_DUMP_EMERG); system_state = SYSTEM_RESTART; + + /* + * NBCON kthreads won't be flushed and stopped properly in + * the emergency restart. Move them to the atomic mode. + */ + nbcon_cpu_emergency_enter(); + printk_trigger_flush(); + machine_emergency_restart(); } EXPORT_SYMBOL_GPL(emergency_restart);