7b192ec4c rejigged the serial port detection code when no port is explicitly specified. Before 7b192ec4c we did grub_serial_find ("com0") in this case, which on *any* platform would return a port called "com0" if one was found. 7b192ec4c changed this so we do grub_serial_find ("auto"), and added a block to handle the "auto" string which tries to detect a port from the SPCR by calling grub_ns8250_spcr_init (), then falls through to com0 if that doesn't work.
However, that block was placed such that it was wrapped in two ifdefs that limit its scope. This means that we would no longer default to com0 unless the requirements of *both* ifdefs are met. 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. Signed-off-by: Adam Williamson <awill...@redhat.com> 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 -- Adam Williamson (he/him/his) Fedora QA Fedora Chat: @adamwill:fedora.im | Mastodon: @ad...@fosstodon.org https://www.happyassassin.net _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel