Re: [PATCH printk v5 07/30] printk: nbcon: Use driver synchronization while (un)registering

From: Petr Mladek
Date: Fri May 17 2024 - 09:45:00 EST


On Mon 2024-05-06 12:33:28, John Ogness wrote:
> On 2024-05-02, John Ogness <john.ogness@xxxxxxxxxxxxx> wrote:
> > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> > index e6b91401895f..15d19d8461ed 100644
> > --- a/kernel/printk/printk.c
> > +++ b/kernel/printk/printk.c
> > @@ -3537,6 +3538,19 @@ void register_console(struct console *newcon)
> > newcon->seq = init_seq;
> > }
> >
> > + /*
> > + * If another context is actively using the hardware of this new
> > + * console, it will not be aware of the nbcon synchronization. This
> > + * is a risk that two contexts could access the hardware
> > + * simultaneously if this new console is used for atomic printing
> > + * and the other context is still using the hardware.
> > + *
> > + * Use the driver synchronization to ensure that the hardware is not
> > + * in use while this new console transitions to being registered.
> > + */
> > + if ((newcon->flags & CON_NBCON) && newcon->write_atomic)
> > + newcon->device_lock(newcon, &flags);
> > +
> > /*
> > * Put this console in the list - keep the
> > * preferred driver at the head of the list.
> > @@ -3561,6 +3575,10 @@ void register_console(struct console *newcon)
> > * register_console() completes.
> > */
> >
> > + /* This new console is now registered. */
> > + if ((newcon->flags & CON_NBCON) && newcon->write_atomic)
> > + newcon->device_unlock(newcon, flags);
> > +
>
> Rather than writing the conditions twice, I will add a local variable
> and check that instead.
>
> bool use_device_lock = (newcon->flags & CON_NBCON) && newcon->write_atomic;
>
> ...
>
> if (use_device_lock)
> newcon->device_lock(newcon, &flags);
>
> ...
>
> if (use_device_lock)
> newcon->device_unlock(newcon, flags);
>

Makes sense. With this change:

Reviewed-by: Petr Mladek <pmladek@xxxxxxxx>

Best Regards,
Petr