summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0296-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0296-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch')
-rw-r--r--debian/patches-rt/0296-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/debian/patches-rt/0296-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch b/debian/patches-rt/0296-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch
new file mode 100644
index 000000000..72589519a
--- /dev/null
+++ b/debian/patches-rt/0296-printk-Enhance-the-condition-check-of-msleep-in-pr_f.patch
@@ -0,0 +1,48 @@
+From 6e1b154dfc59c96068eafef9fafbda28b723d3e6 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 296/323] printk: Enhance the condition check of msleep in
+ pr_flush()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz
+
+[ Upstream commit 83e9288d9c4295d1195e9d780fcbc42c72ba4a83 ]
+
+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
+Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
+---
+ 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 14cb111fe9f0..d2205872304d 100644
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -3554,7 +3554,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.43.0
+