summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0016-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0016-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch')
-rw-r--r--debian/patches-rt/0016-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/debian/patches-rt/0016-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch b/debian/patches-rt/0016-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch
new file mode 100644
index 000000000..2804a4bb8
--- /dev/null
+++ b/debian/patches-rt/0016-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch
@@ -0,0 +1,45 @@
+From 31cb56b19e7f68f025128b54aa0b1b07b0a54e4f Mon Sep 17 00:00:00 2001
+From: Chao Qin <chao.qin@intel.com>
+Date: Mon, 19 Jul 2021 10:26:50 +0800
+Subject: [PATCH 016/158] printk: Enhance the condition check of msleep in
+ pr_flush()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patches-5.15.10-rt24.tar.xz
+
+There is msleep in pr_flush(). If call WARN() in the early boot
+stage such as in early_initcall, pr_flush() will run into msleep
+when process scheduler is not ready yet. And then the system will
+sleep forever.
+
+Before the system_state is SYSTEM_RUNNING, make sure DO NOT sleep
+in pr_flush().
+
+Fixes: c0b395bd0fe3("printk: add pr_flush()")
+Signed-off-by: Chao Qin <chao.qin@intel.com>
+Signed-off-by: Lili Li <lili.li@intel.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Reviewed-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lore.kernel.org/lkml/20210719022649.3444072-1-chao.qin@intel.com
+---
+ kernel/printk/printk.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
+index 84e17c974a15..0cc8e8acf545 100644
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -3654,7 +3654,9 @@ bool pr_flush(int timeout_ms, bool reset_on_progress)
+ u64 diff;
+ u64 seq;
+
+- may_sleep = (preemptible() && !in_softirq());
++ may_sleep = (preemptible() &&
++ !in_softirq() &&
++ system_state >= SYSTEM_RUNNING);
+
+ seq = prb_next_seq(prb);
+
+--
+2.33.1
+