[PATCH v7 4/4] Load option with short device path for boot vars

Ilias Apalodimas ilias.apalodimas at linaro.org
Thu Jun 1 09:20:34 CEST 2023


On Wed, 31 May 2023 at 20:47, Raymond Mao <raymond.mao at linaro.org> wrote:
>
> The boot variables automatically generated for removable medias
> should be with short form of device path without device nodes.
> This is a requirement for the case that a removable media is
> plugged into a different port but is still able to work with the
> existing boot variables.
>
> Signed-off-by: Raymond Mao <raymond.mao at linaro.org>
> Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> Changes in v2
> - Ignore EFI_NOT_FOUND returned from
>   efi_bootmgr_update_media_device_boot_option which means no boot
>   options scanned.
> Changes in v3
> - Split the patch into moving and renaming functions and
>   individual patches for each changed functionality
> Changes in v4
> - Revert v2 change of introducing a bool parameter when updating
>   the boot option. Use short-form of device path by default
> Changes in v5
> - Add warning log when a short-form device path doesn't exist
> Changes in v6
> - Revert v5 change and use original device path if short-form does
>   not exist
>
>  lib/efi_loader/efi_bootmgr.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
> index 95559ad6dd..90151f45d7 100644
> --- a/lib/efi_loader/efi_bootmgr.c
> +++ b/lib/efi_loader/efi_bootmgr.c
> @@ -371,6 +371,7 @@ static efi_status_t efi_bootmgr_enumerate_boot_option(struct eficonfig_media_boo
>                 struct efi_load_option lo;
>                 char buf[BOOTMENU_DEVICE_NAME_MAX];
>                 struct efi_device_path *device_path;
> +               struct efi_device_path *short_dp;
>
>                 ret = efi_search_protocol(volume_handles[i], &efi_guid_device_path, &handler);
>                 if (ret != EFI_SUCCESS)
> @@ -387,6 +388,11 @@ static efi_status_t efi_bootmgr_enumerate_boot_option(struct eficonfig_media_boo
>                 p = dev_name;
>                 utf8_utf16_strncpy(&p, buf, strlen(buf));
>
> +               /* prefer to short form device path */
> +               short_dp = efi_dp_shorten(device_path);
> +               if (short_dp)
> +                       device_path = short_dp;
> +
>                 lo.label = dev_name;
>                 lo.attributes = LOAD_OPTION_ACTIVE;
>                 lo.file_path = device_path;
> --
> 2.25.1
>

Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>


More information about the U-Boot mailing list