On 05/06/24 10:15, John Ogness wrote: ... > Yes, that probably is a good candidate for emergency mode. > > However, your report is also identifying a real issue: > nbcon_cpu_emergency_flush() was implemented to be callable from > non-emergency contexts (in which case it should do nothing). However, in > order to check if it is an emergency context, migration needs to be > disabled. I see. > Perhaps the below change can be made for v2 of this series? Yes, this seems to cure it. Thanks for the super quick reply and patch! Best, Juri > diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c > index 4b9645e7ed70..eeaf8465f492 100644 > --- a/kernel/printk/nbcon.c > +++ b/kernel/printk/nbcon.c > @@ -1581,8 +1581,19 @@ void nbcon_cpu_emergency_exit(void) > */ > void nbcon_cpu_emergency_flush(void) > { > + bool is_emergency; > + > + /* > + * If the current context is not an emergency context, preemption > + * might be enabled. To be sure, disable preemption when checking > + * if this is an emergency context. > + */ > + preempt_disable(); > + is_emergency = (*nbcon_get_cpu_emergency_nesting() != 0); > + preempt_enable(); > + > /* The explicit flush is needed only in the emergency context. */ > - if (*(nbcon_get_cpu_emergency_nesting()) == 0) > + if (!is_emergency) > return; > > nbcon_atomic_flush_pending(); >