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

Reply via email to