On Tue, 2024-10-15 at 11:10 -0700, Adam Williamson wrote:
> 
> 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.

I am not entirely sure what the "moving up" changes in practice. The
various top-level if () blocks in grub_serial_find() all operates on
the name.

You are basically moving the

  if (name is "auto")

From after to before the

 if (name starts with "port")

I don't think that in itself has any impact or changes anything other
than being moved outside of the confines of the ifdef. So I assume
that's what you are after.

Correct me if I'm wrong but the only "issue" here is that if you are on
a target for which:

#if (defined(__i386__) || defined(__x86_64__)) && 
!defined(GRUB_MACHINE_IEEE1275) && !defined(GRUB_MACHINE_QEMU)

Isn't true, then the new "default" of "auto" will fail to match an existing
port in the list called "com0" right ?

In which case a simpler patch would have been maybe to just add to
the very top of the function insteadinstead

  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 */
      name = "com0";
    }

Don't you think ?

Cheers,
Ben.

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to