On Sun 2024-02-18 20:03:25, John Ogness wrote: > Mark an emergency section within print_other_cpu_stall(), where > RCU stall information is printed. In this 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. > > Signed-off-by: John Ogness <john.ogness@xxxxxxxxxxxxx> Reviewed-by: Petr Mladek <pmladek@xxxxxxxx> I was just curious about one thing. But it seems to work well. print_other_cpu_stall() print backtraces on other CPUs via NMI. The other CPUs would not see the emergency context. They would call defer_console_output() because they are in NMI. As a result: + Legacy consoles might be flushed on other CPUs even before nbcon_cpu_emergency_exit() gets called. + nbcon consoles might still be flushed by the printk kthread until all messages get flushed directly by nbcon_cpu_emergency_exit() As I wrote. The behavior is corrent. It was just not obvious to me. > --- a/kernel/rcu/tree_stall.h > +++ b/kernel/rcu/tree_stall.h > @@ -9,6 +9,7 @@ > > #include <linux/kvm_para.h> > #include <linux/rcu_notifier.h> > +#include <linux/console.h> > > ////////////////////////////////////////////////////////////////////////////// > // > @@ -604,6 +605,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 > @@ -658,6 +661,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) > panic_on_rcu_stall(); > > rcu_force_quiescent_state(); /* Kick them all. */ > + > + nbcon_cpu_emergency_exit(); > } > > static void print_cpu_stall(unsigned long gps) Best Regards, Petr