On Wed, 2024-10-16 at 10:09 -0700, Adam Williamson wrote: .../...
> To fix this, move the handling of "auto" up to happen first, > before the ifdef around "port" handling kicks in. If we don't > find an SPCR, change the name to "com0", so it will be handled > by the existing "exact match by name" block that comes next, > just as it was before 7b192ec4c. In the handling of "auto", have > the ifdef that is meant to block grub_ns8250_spcr_init on > inappropriate platforms *only* wrap that call, not *also* wrap > the fallback to com0. This also nicely avoid duplicating the loop... > Signed-off-by: Adam Williamson <awill...@redhat.com> I wrote the original bug so: Reviewed-by: Benjamin Herrenschmidt <b...@kernel.crashing.org> > diff --git a/grub-core/term/serial.c b/grub-core/term/serial.c > index 8260dcb7a..8f37afd5c 100644 > --- a/grub-core/term/serial.c > +++ b/grub-core/term/serial.c > @@ -145,8 +145,20 @@ grub_serial_find (const char *name) > { > struct grub_serial_port *port; > > + if (grub_strcmp (name, "auto") == 0) > + { > +#if (defined(__i386__) || defined(__x86_64__)) && > !defined(GRUB_MACHINE_IEEE1275) && !defined(GRUB_MACHINE_QEMU) > + /* Look for an SPCR if any. If not, default to com0. */ > + port = grub_ns8250_spcr_init (); > + if (port != NULL) > + return port; > +#endif > + /* Legacy default, will be handled by next step */ > + name = "com0"; > + } > + > /* > - * First look for an exact match by name, this will take care of > + * Look for an exact match by name, this will take care of > * things like "com0" which have already been created and that > * this function cannot re-create. > */ > @@ -209,19 +221,6 @@ grub_serial_find (const char *name) > if (port != NULL) > return port; > } > - > -#if (defined(__i386__) || defined(__x86_64__)) && > !defined(GRUB_MACHINE_IEEE1275) && !defined(GRUB_MACHINE_QEMU) > - if (grub_strcmp (name, "auto") == 0) > - { > - /* Look for an SPCR if any. If not, default to com0. */ > - port = grub_ns8250_spcr_init (); > - if (port != NULL) > - return port; > - FOR_SERIAL_PORTS (port) > - if (grub_strcmp (port->name, "com0") == 0) > - return port; > - } > -#endif > #endif > > #ifdef GRUB_MACHINE_IEEE1275 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel