Hi, On Tue, Jun 10, 2025 at 1:03 PM Marcos Paulo de Souza <mpdeso...@suse.com> wrote: > > On Mon, 2025-06-09 at 13:13 -0700, Doug Anderson wrote: > > Hi, > > > > On Fri, Jun 6, 2025 at 7:54 PM Marcos Paulo de Souza > > <mpdeso...@suse.com> wrote: > > > > > > All consoles found on for_each_console are registered, meaning that > > > all of > > > them are CON_ENABLED. The code tries to find an active console, so > > > check if the > > > console is not suspended instead. > > > > > > Signed-off-by: Marcos Paulo de Souza <mpdeso...@suse.com> > > > --- > > > drivers/tty/serial/kgdboc.c | 3 ++- > > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/tty/serial/kgdboc.c > > > b/drivers/tty/serial/kgdboc.c > > > index > > > 85f6c5a76e0fff556f86f0d45ebc5aadf5b191e8..af6d2208b8ddb82d62f33292b > > > 006b2923583a0d2 100644 > > > --- a/drivers/tty/serial/kgdboc.c > > > +++ b/drivers/tty/serial/kgdboc.c > > > @@ -577,7 +577,8 @@ static int __init kgdboc_earlycon_init(char > > > *opt) > > > console_list_lock(); > > > for_each_console(con) { > > > if (con->write && con->read && > > > - (con->flags & (CON_BOOT | CON_ENABLED)) && > > > + (con->flags & CON_BOOT) && > > > + ((con->flags & CON_SUSPENDED) == 0) && > > > > I haven't tried running the code, so I could easily be mistaken, > > but... > > > > ...the above doesn't seem like the correct conversion. The old > > expression was: > > > > (con->flags & (CON_BOOT | CON_ENABLED)) > > > > That would evaluate to non-zero (true) if the console was _either_ > > "boot" or "enabled". > > > > The new expression is is: > > > > (con->flags & CON_BOOT) && ((con->flags & CON_SUSPENDED) == 0) > > > > That's only true if the console is _both_ "boot" and "not suspended". > > My idea here was that the users of for_each_console would find the > first available console, and by available I would expect them to be > usable. In this case, is there any value for kgdboc to use a console > that is suspended? Would it work in this case? > > I never really used kgdboc, but only checking if the console was > enabled (which it's always the case here) was something that needed to > be fixed. > > Maybe I'm missing something here as well, so please let me know if I > should remove the new check.
So it's been 5 years since I wrote the code, but reading that I was checking for: (con->flags & (CON_BOOT | CON_ENABLED)) Makes me believe that this was the case when I wrote the code: 1. Early boot consoles (earlycon) were not marked as CON_ENABLED but were instead marked as CON_BOOT. 2. Once consoles became non-early they were moved to CON_ENABLED. ...and the code was basically looking for any consoles with a matching name that were either boot consoles or normal/enabled consoles. Is that a plausible theory? It's also possible that I just was confused when I code things up and that I really meant to write: ((con->flags & (CON_BOOT | CON_ENABLED)) == (CON_BOOT | CON_ENABLED)) ...AKA that I wanted consoles that were BOOT _and_ ENABLED. In any case, I booted up the current mainline and I put a printout here. I saw: [ 0.000000] kgdboc: DOUG: console qcom_geni has flags 0x0000000f So that means that both BOOT and ENABLED were set. That makes me feel like it's plausible that I was confused and really meant BOOT _and_ ENABLED. I didn't spend time trying to figure out how to build/boot an old kernel to check, though. In any case, given my test then I think your change should be fine. Given that it does change the boolean logic, it seems like that deserves a mention in the commit message. -Doug _______________________________________________ Kgdb-bugreport mailing list Kgdb-bugreport@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport