diff options
Diffstat (limited to '')
-rw-r--r-- | debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch b/debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch new file mode 100644 index 0000000000..225e8db694 --- /dev/null +++ b/debian/patches-rt/0134-printk-Avoid-false-positive-lockdep-report-for-legac.patch @@ -0,0 +1,64 @@ +From: John Ogness <john.ogness@linutronix.de> +Date: Mon, 11 Dec 2023 09:34:16 +0000 +Subject: [PATCH 134/134] printk: Avoid false positive lockdep report for + legacy driver. +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz + +printk may invoke the legacy console driver from atomic context. This leads to +a lockdep splat because the console driver will acquire a sleeping lock and the +caller may also hold a spinning lock. This is noticed by lockdep on !PREEMPT_RT +configurations because it will also lead to a problem on PREEMPT_RT. + +On PREEMPT_RT the atomic path is always avoided and the console driver is +always invoked from a dedicated thread. Thus the lockdep splat is a false +positive. + +Override the lock-context before invoking the console driver. + +Signed-off-by: John Ogness <john.ogness@linutronix.de> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + kernel/printk/printk.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +--- a/kernel/printk/printk.c ++++ b/kernel/printk/printk.c +@@ -2817,6 +2817,8 @@ static void __console_unlock(void) + up_console_sem(); + } + ++static DEFINE_WAIT_OVERRIDE_MAP(printk_legacy_map, LD_WAIT_SLEEP); ++ + #ifdef CONFIG_PRINTK + + /* +@@ -2985,7 +2987,7 @@ static bool console_emit_next_record(str + /* + * On PREEMPT_RT this function is either in a thread or + * panic context. So there is no need for concern about +- * printk reentrance or handovers. ++ * printk reentrance, handovers, or lockdep complaints. + */ + + con->write(con, outbuf, pmsg.outbuf_len); +@@ -3007,7 +3009,9 @@ static bool console_emit_next_record(str + /* Do not trace print latency. */ + stop_critical_timings(); + ++ lock_map_acquire_try(&printk_legacy_map); + con->write(con, outbuf, pmsg.outbuf_len); ++ lock_map_release(&printk_legacy_map); + + start_critical_timings(); + +@@ -3084,7 +3088,10 @@ static bool console_flush_all(bool do_co + any_usable = true; + + if (flags & CON_NBCON) { ++ ++ lock_map_acquire_try(&printk_legacy_map); + progress = nbcon_atomic_emit_next_record(con, handover, cookie); ++ lock_map_release(&printk_legacy_map); + + printk_seq = nbcon_seq_read(con); + } else { |