Removal of printk safe buffers delays NMI context printk

From: Nicholas Piggin
Date: Thu Nov 04 2021 - 11:54:53 EST


Hi John,

It seems printk from NMI context is now delayed indefinitely and
there is no printk_safe_flush equivalent (or I can't see one) to
allow a NMI buffer to be flushed by a different CPU.

This causes hard lockup watchdog messages to not get shown on the
console. I can call printk from a different CPU and that seems to
flush the stuck CPU's NMI buffer immediately.

What's the best way to expose this? Can we have something like tihs?

void printk_flush(void)
{
preempt_disable();
if (console_trylock_spinning())
console_unlock();
preempt_enable();
wake_up_klogd();
}

Thanks,
Nick