summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0028-rcu-Mark-emergency-sections-in-rcu-stalls.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0028-rcu-Mark-emergency-sections-in-rcu-stalls.patch')
-rw-r--r--debian/patches-rt/0028-rcu-Mark-emergency-sections-in-rcu-stalls.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/debian/patches-rt/0028-rcu-Mark-emergency-sections-in-rcu-stalls.patch b/debian/patches-rt/0028-rcu-Mark-emergency-sections-in-rcu-stalls.patch
new file mode 100644
index 0000000000..7a13ac0042
--- /dev/null
+++ b/debian/patches-rt/0028-rcu-Mark-emergency-sections-in-rcu-stalls.patch
@@ -0,0 +1,128 @@
+From: John Ogness <john.ogness@linutronix.de>
+Date: Mon, 11 Sep 2023 15:53:39 +0000
+Subject: [PATCH 28/46] rcu: Mark emergency sections in rcu stalls
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.9/older/patches-6.9-rt5.tar.xz
+
+Mark emergency sections wherever multiple lines of
+rcu stall information are generated. In an emergency
+section the CPU will not perform console output for the
+printk() calls. Instead, a flushing of the console
+output is triggered when exiting the emergency section.
+This allows the full message block to be stored as
+quickly as possible in the ringbuffer.
+
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ kernel/rcu/tree_exp.h | 9 +++++++++
+ kernel/rcu/tree_stall.h | 11 +++++++++++
+ 2 files changed, 20 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);
+@@ -571,6 +572,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"));
+@@ -612,6 +616,7 @@ static void synchronize_rcu_expedited_wa
+ }
+ pr_cont("\n");
+ }
++ nbcon_cpu_emergency_flush();
+ rcu_for_each_leaf_node(rnp) {
+ for_each_leaf_node_possible_cpu(rnp, cpu) {
+ mask = leaf_node_cpu_bit(rnp, cpu);
+@@ -624,6 +629,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();
+ }
+ }
+@@ -792,6 +800,7 @@ static void rcu_exp_print_detail_task_st
+ */
+ touch_nmi_watchdog();
+ sched_show_task(t);
++ nbcon_cpu_emergency_flush();
+ }
+ raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
+ }
+--- 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>
+
+@@ -260,6 +261,7 @@ static void rcu_print_detail_task_stall_
+ */
+ touch_nmi_watchdog();
+ sched_show_task(t);
++ nbcon_cpu_emergency_flush();
+ }
+ raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
+ }
+@@ -522,6 +524,7 @@ static void print_cpu_stall_info(int cpu
+ falsepositive ? " (false positive?)" : "");
+
+ print_cpu_stat_info(cpu);
++ nbcon_cpu_emergency_flush();
+ }
+
+ /* Complain about starvation of grace-period kthread. */
+@@ -604,6 +607,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
+@@ -655,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. */
+@@ -675,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
+@@ -703,6 +712,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();
+
+ /*