[PATCH 1/1] efi_selftest: keep devices in ExitBootServices()
Ilias Apalodimas
ilias.apalodimas at linaro.org
Thu Nov 12 22:09:33 CET 2020
On Thu, Nov 12, 2020 at 09:29:21PM +0100, Heinrich Schuchardt wrote:
> When calling ExitBootServices during out unit tests we should not detach
> devices as we need console output for runtime tests.
>
> Fixes: 529441ca89b1 ("efi_loader: Disable devices before handing over control")
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> include/efi_loader.h | 3 +++
> lib/efi_loader/efi_boottime.c | 13 +++++++++----
> lib/efi_selftest/efi_selftest.c | 3 +++
> 3 files changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/include/efi_loader.h b/include/efi_loader.h
> index f550ced568..455b9c8031 100644
> --- a/include/efi_loader.h
> +++ b/include/efi_loader.h
> @@ -59,6 +59,9 @@ extern efi_handle_t efi_root;
> /* Set to EFI_SUCCESS when initialized */
> extern efi_status_t efi_obj_list_initialized;
>
> +/* Flag used by the selftest to avoid detaching devices in ExitBootServices() */
> +extern bool efi_st_keep_devices;
> +
> /* EFI system partition */
> extern struct efi_system_partition {
> enum if_type if_type;
> diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> index dfa71b1774..246b59d3b3 100644
> --- a/lib/efi_loader/efi_boottime.c
> +++ b/lib/efi_loader/efi_boottime.c
> @@ -38,6 +38,9 @@ LIST_HEAD(efi_event_queue);
> /* Flag to disable timer activity in ExitBootServices() */
> static bool timers_enabled = true;
>
> +/* Flag used by the selftest to avoid detaching devices in ExitBootServices() */
> +bool efi_st_keep_devices;
> +
> /* List of all events registered by RegisterProtocolNotify() */
> LIST_HEAD(efi_register_notify_events);
>
> @@ -1996,10 +1999,12 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
> list_del(&evt->link);
> }
>
> - if IS_ENABLED(CONFIG_USB_DEVICE)
> - udc_disconnect();
> - board_quiesce_devices();
> - dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL);
> + if (!efi_st_keep_devices) {
> + if IS_ENABLED(CONFIG_USB_DEVICE)
> + udc_disconnect();
> + board_quiesce_devices();
> + dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL);
> + }
>
> /* Patch out unsupported runtime function */
> efi_runtime_detach();
> diff --git a/lib/efi_selftest/efi_selftest.c b/lib/efi_selftest/efi_selftest.c
> index 85e819bdfa..b8eed048c2 100644
> --- a/lib/efi_selftest/efi_selftest.c
> +++ b/lib/efi_selftest/efi_selftest.c
> @@ -38,6 +38,9 @@ void efi_st_exit_boot_services(void)
> efi_status_t ret;
> struct efi_mem_desc *memory_map;
>
> + /* Do not detach devices in ExitBootServices. We need the console. */
> + efi_st_keep_devices = true;
> +
> ret = boottime->get_memory_map(&map_size, NULL, &map_key, &desc_size,
> &desc_version);
> if (ret != EFI_BUFFER_TOO_SMALL) {
> --
> 2.28.0
>
Acked-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list