NOTE, NOT PART OF COMMIT MESSAGE: I am not at all used to the email-
based workflow, I don't typically contribute to projects that use it, I
am used to pull requests. I don't have the git email stuff set up at
all. This email is manually produced by copy/pasting the 'git show'
output. Sorry if this causes any problems. I'm also not subscribed to
this list, so please CC me on any replies. I noticed this apparent
issue while investigating
https://bugzilla.redhat.com/show_bug.cgi?id=2317048 . Original commit
message and patch follow.

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, otherwise it
fell through to the later blocks about ns8250 and ieee1275.
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 much later than a call with "com0"
would be handled, and 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 right after
the exact port name match (and before the mips/x86/EMU/ARC ifdef
kicks in), and change the ifdef that is meant to block use of
grub_ns8250_spcr_init on inappropriate platforms to *only* wrap
the call to grub_ns8250_spcr_init, 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..d9b39d5da 100644
--- a/grub-core/term/serial.c
+++ b/grub-core/term/serial.c
@@ -154,6 +154,20 @@ grub_serial_find (const char *name)
     if (grub_strcmp (port->name, name) == 0)
       return 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. */
+      port = grub_ns8250_spcr_init ();
+      if (port != NULL)
+        return port;
+#endif
+      /* If not, default to com0.*/
+      FOR_SERIAL_PORTS (port)
+        if (grub_strcmp (port->name, "com0") == 0)
+          return port;
+    }
+
 #if (defined(__mips__) || defined (__i386__) || defined (__x86_64__)) && 
!defined(GRUB_MACHINE_EMU) && !defined(GRUB_MACHINE_ARC)
   if (grub_strncmp (name, "port", sizeof ("port") - 1) == 0
       && grub_isxdigit (name [sizeof ("port") - 1]))
@@ -209,19 +223,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