On Tue, Aug 20, 2024 at 08:36:00AM +0206, John Ogness wrote: > 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@xxxxxxxxxxxxx> > Reviewed-by: Petr Mladek <pmladek@xxxxxxxx> I am guessing that this should go with the rest of this series, so: Acked-by: Paul E. McKenney <paulmck@xxxxxxxxxx> > --- > kernel/rcu/tree_exp.h | 7 +++++++ > kernel/rcu/tree_stall.h | 9 +++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h > index 4acd29d16fdb..f6b35a0585a8 100644 > --- a/kernel/rcu/tree_exp.h > +++ b/kernel/rcu/tree_exp.h > @@ -7,6 +7,7 @@ > * Authors: Paul E. McKenney <paulmck@xxxxxxxxxxxxx> > */ > > +#include <linux/console.h> > #include <linux/lockdep.h> > > static void rcu_exp_handler(void *unused); > @@ -590,6 +591,9 @@ static void synchronize_rcu_expedited_wait(void) > 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_wait(void) > 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(); > } > } > diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h > index 4b0e9d7c4c68..b3a6943127bc 100644 > --- a/kernel/rcu/tree_stall.h > +++ b/kernel/rcu/tree_stall.h > @@ -7,6 +7,7 @@ > * Author: Paul E. McKenney <paulmck@xxxxxxxxxxxxx> > */ > > +#include <linux/console.h> > #include <linux/kvm_para.h> > #include <linux/rcu_notifier.h> > > @@ -605,6 +606,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) > 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(unsigned long gp_seq, unsigned long gps) > 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 long gps) > 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 long gps) > jiffies + 3 * rcu_jiffies_till_stall_check() + 3); > raw_spin_unlock_irqrestore_rcu_node(rnp, flags); > > + nbcon_cpu_emergency_exit(); > + > panic_on_rcu_stall(); > > /* > -- > 2.39.2 >