Re: [PATCH] printk: stop spining waiter when console resume to flush prb

From: Sergey Senozhatsky
Date: Thu May 06 2021 - 10:12:10 EST


On (21/05/06 23:07), Sergey Senozhatsky wrote:
>
> Can we count the number of lines that we print from the `current` context
> in console_unlock() and if after N messages there is no console_lock waiter
> waiting for the `current` to handover console lock ownership, then create
> one: schedule IRQ work that will become a console lock owner, spin on
> console lock and call console_unlock() once it acquired the ownership.
> That 'artificial' console lock owner will do the same - print N
> messages, if nothing wants to become a console lock owner then it'll
> queue another IRQ work.

Or even simpler

console_unlock()
{
...

if (printed_messages > limit && !console_lock_spinning_disable_and_check()) {
printk_safe_exit_irqrestore(flags);

console_locked = 0;
up_console_sem();

defer_console_output();
return;
}

...
}