Re: [PATCH] printk: Skip console drivers on PREEMPT_RT.

From: John Ogness
Date: Wed Jul 20 2022 - 12:26:49 EST


Hi Sebastian,

On 2022-07-20, Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote:
> printk might be invoked in a context with disabled interrupts and or
> preemption and additionally disables interrupts before it invokes the
> console drivers. This is behaviour is not compatible with PREEMPT_RT.
>
> Disable console printing until the return of atomic consoles and the
> printing thread. This allows to retrieve the log buffer from user space
> which is not possible by disable printk.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> ---
> kernel/printk/printk.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -2843,6 +2843,16 @@ void console_unlock(void)
> }
>
> /*
> + * On PREEMPT_RT it is not possible to invoke console drivers with
> + * disabled interrupts and or preemption. Therefore all drivers are
> + * skipped and the output can be retrieved from the buffer.
> + */
> + if (IS_ENABLED(CONFIG_PREEMPT_RT)) {
> + up_console_sem();

This should be:

__console_unlock();

> + return;
> + }

Note that if @console_may_schedule is 1, then we are in a sleepable
context and could print. But since that is not very often, it is
probably better to just have it off all the time as you propose.

John Ogness