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

Reply via email to