98 lines
2.9 KiB
Diff
98 lines
2.9 KiB
Diff
|
From: John Ogness <john.ogness@linutronix.de>
|
||
|
Date: Tue, 20 Aug 2024 08:36:00 +0206
|
||
|
Subject: [PATCH 34/54] rcu: Mark emergency sections in rcu stalls
|
||
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.11/older/patches-6.11-rt7.tar.xz
|
||
|
|
||
|
Mark emergency sections wherever multiple lines of
|
||
|
rcu stall information are generated. In an emergency
|
||
|
section, every printk() call will attempt to directly
|
||
|
flush to the consoles using the EMERGENCY priority.
|
||
|
|
||
|
Signed-off-by: John Ogness <john.ogness@linutronix.de>
|
||
|
Reviewed-by: Petr Mladek <pmladek@suse.com>
|
||
|
Acked-by: Paul E. McKenney <paulmck@kernel.org>
|
||
|
Link: https://lore.kernel.org/r/20240820063001.36405-35-john.ogness@linutronix.de
|
||
|
Signed-off-by: Petr Mladek <pmladek@suse.com>
|
||
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||
|
---
|
||
|
kernel/rcu/tree_exp.h | 7 +++++++
|
||
|
kernel/rcu/tree_stall.h | 9 +++++++++
|
||
|
2 files changed, 16 insertions(+)
|
||
|
|
||
|
--- a/kernel/rcu/tree_exp.h
|
||
|
+++ b/kernel/rcu/tree_exp.h
|
||
|
@@ -7,6 +7,7 @@
|
||
|
* Authors: Paul E. McKenney <paulmck@linux.ibm.com>
|
||
|
*/
|
||
|
|
||
|
+#include <linux/console.h>
|
||
|
#include <linux/lockdep.h>
|
||
|
|
||
|
static void rcu_exp_handler(void *unused);
|
||
|
@@ -590,6 +591,9 @@ static void synchronize_rcu_expedited_wa
|
||
|
return;
|
||
|
if (rcu_stall_is_suppressed())
|
||
|
continue;
|
||
|
+
|
||
|
+ nbcon_cpu_emergency_enter();
|
||
|
+
|
||
|
j = jiffies;
|
||
|
rcu_stall_notifier_call_chain(RCU_STALL_NOTIFY_EXP, (void *)(j - jiffies_start));
|
||
|
trace_rcu_stall_warning(rcu_state.name, TPS("ExpeditedStall"));
|
||
|
@@ -643,6 +647,9 @@ static void synchronize_rcu_expedited_wa
|
||
|
rcu_exp_print_detail_task_stall_rnp(rnp);
|
||
|
}
|
||
|
jiffies_stall = 3 * rcu_exp_jiffies_till_stall_check() + 3;
|
||
|
+
|
||
|
+ nbcon_cpu_emergency_exit();
|
||
|
+
|
||
|
panic_on_rcu_stall();
|
||
|
}
|
||
|
}
|
||
|
--- a/kernel/rcu/tree_stall.h
|
||
|
+++ b/kernel/rcu/tree_stall.h
|
||
|
@@ -7,6 +7,7 @@
|
||
|
* Author: Paul E. McKenney <paulmck@linux.ibm.com>
|
||
|
*/
|
||
|
|
||
|
+#include <linux/console.h>
|
||
|
#include <linux/kvm_para.h>
|
||
|
#include <linux/rcu_notifier.h>
|
||
|
|
||
|
@@ -605,6 +606,8 @@ static void print_other_cpu_stall(unsign
|
||
|
if (rcu_stall_is_suppressed())
|
||
|
return;
|
||
|
|
||
|
+ nbcon_cpu_emergency_enter();
|
||
|
+
|
||
|
/*
|
||
|
* OK, time to rat on our buddy...
|
||
|
* See Documentation/RCU/stallwarn.rst for info on how to debug
|
||
|
@@ -657,6 +660,8 @@ static void print_other_cpu_stall(unsign
|
||
|
rcu_check_gp_kthread_expired_fqs_timer();
|
||
|
rcu_check_gp_kthread_starvation();
|
||
|
|
||
|
+ nbcon_cpu_emergency_exit();
|
||
|
+
|
||
|
panic_on_rcu_stall();
|
||
|
|
||
|
rcu_force_quiescent_state(); /* Kick them all. */
|
||
|
@@ -677,6 +682,8 @@ static void print_cpu_stall(unsigned lon
|
||
|
if (rcu_stall_is_suppressed())
|
||
|
return;
|
||
|
|
||
|
+ nbcon_cpu_emergency_enter();
|
||
|
+
|
||
|
/*
|
||
|
* OK, time to rat on ourselves...
|
||
|
* See Documentation/RCU/stallwarn.rst for info on how to debug
|
||
|
@@ -706,6 +713,8 @@ static void print_cpu_stall(unsigned lon
|
||
|
jiffies + 3 * rcu_jiffies_till_stall_check() + 3);
|
||
|
raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
|
||
|
|
||
|
+ nbcon_cpu_emergency_exit();
|
||
|
+
|
||
|
panic_on_rcu_stall();
|
||
|
|
||
|
/*
|