On Fri, 20 Apr 2018 16:57:20 +0200 Petr Mladek <pmla...@suse.com> wrote:
> No, call_console_drivers() is done with interrupts disabled: > > console_lock_spinning_enable(); > > stop_critical_timings(); /* don't trace print latency */ > ----> call_console_drivers(ext_text, ext_len, text, len); > start_critical_timings(); > > if (console_lock_spinning_disable_and_check()) { > ----> printk_safe_exit_irqrestore(flags); > goto out; > } > > ----> printk_safe_exit_irqrestore(flags); > > They were called with interrupts disabled for ages, long before > printk_safe. In fact, it was all the time in the git kernel history. > > Therefore only NMIs are in the game. And they should be solved > by the above change. > Really? console_trylock_spinning(); /* console_owner now equals current */ console_unlock() { ---> take interrupt here: vprintk() { vprintk_func() { if (console_owner == current && !__ratelimit(&ratelimit_console)) [ RATE LIMIT HERE!!!! ] for (;;) { printk_safe_enter_irqsave(flags); -- Steve