Hi, On Wed, Nov 16, 2022 at 8:22 AM John Ogness <john.ogness@xxxxxxxxxxxxx> wrote: > > Use srcu console list iteration for safe console list traversal. > Note that this is a preparatory change for when console_lock no > longer provides synchronization for the console list. > > Signed-off-by: John Ogness <john.ogness@xxxxxxxxxxxxx> > Reviewed-by: Petr Mladek <pmladek@xxxxxxxx> > --- > drivers/tty/serial/kgdboc.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c > index 5be381003e58..c6df9ef34099 100644 > --- a/drivers/tty/serial/kgdboc.c > +++ b/drivers/tty/serial/kgdboc.c > @@ -451,6 +451,7 @@ static void kgdboc_earlycon_pre_exp_handler(void) > { > struct console *con; > static bool already_warned; > + int cookie; > > if (already_warned) > return; > @@ -463,9 +464,14 @@ static void kgdboc_earlycon_pre_exp_handler(void) > * serial drivers might be OK with this, print a warning once per > * boot if we detect this case. > */ > - for_each_console(con) > + cookie = console_srcu_read_lock(); > + for_each_console_srcu(con) { > if (con == kgdboc_earlycon_io_ops.cons) > - return; > + break; > + } > + console_srcu_read_unlock(cookie); > + if (con) > + return; Is there truly any guarantee that "con" will be NULL if for_each_console_srcu() finishes naturally (AKA without a "break" being executed)? It looks as if currently this will be true but nothing in the comments of for_each_console_srcu() nor hlist_for_each_entry_srcu() (which it calls) guarantees this, right? It would be nice if that was documented, but I guess it's not a huge deal. Also: wasn't there just some big issue about people using loop iteration variables after the loop finished? https://lwn.net/Articles/885941/ Ah, I guess that's a slightly different problem and probably not relevant here. So it seems like this is fine. Reviewed-by: Douglas Anderson <dianders@xxxxxxxxxxxx>