diff options
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.patch | 45 |
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 + |