summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch b/debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
new file mode 100644
index 0000000000..55ec76c5c0
--- /dev/null
+++ b/debian/patches-rt/0125-printk-nbcon-Stop-threads-on-shutdown-reboot.patch
@@ -0,0 +1,60 @@
+From: John Ogness <john.ogness@linutronix.de>
+Date: Tue, 26 Sep 2023 13:04:15 +0000
+Subject: [PATCH 125/134] printk: nbcon: Stop threads on shutdown/reboot
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+
+Register a syscore_ops shutdown function to stop all threaded
+printers on shutdown/reboot. This allows printk to transition back
+to atomic printing in order to provide a robust mechanism for
+outputting the final messages.
+
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/printk/nbcon.c | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+--- a/kernel/printk/nbcon.c
++++ b/kernel/printk/nbcon.c
+@@ -8,6 +8,7 @@
+ #include <linux/kthread.h>
+ #include <linux/slab.h>
+ #include <linux/serial_core.h>
++#include <linux/syscore_ops.h>
+ #include "printk_ringbuffer.h"
+ #include "internal.h"
+ /*
+@@ -1577,3 +1578,33 @@ void nbcon_release(struct uart_port *up)
+ con->locked_port = false;
+ }
+ EXPORT_SYMBOL_GPL(nbcon_release);
++
++/**
++ * printk_kthread_shutdown - shutdown all threaded printers
++ *
++ * On system shutdown all threaded printers are stopped. This allows printk
++ * to transition back to atomic printing, thus providing a robust mechanism
++ * for the final shutdown/reboot messages to be output.
++ */
++static void printk_kthread_shutdown(void)
++{
++ struct console *con;
++
++ console_list_lock();
++ for_each_console(con) {
++ if (con->flags & CON_NBCON)
++ nbcon_kthread_stop(con);
++ }
++ console_list_unlock();
++}
++
++static struct syscore_ops printk_syscore_ops = {
++ .shutdown = printk_kthread_shutdown,
++};
++
++static int __init printk_init_ops(void)
++{
++ register_syscore_ops(&printk_syscore_ops);
++ return 0;
++}
++device_initcall(printk_init_ops);