efi_selftest: keep devices in ExitBootServices()

When calling ExitBootServices during out unit tests we should not detach
devices as we need console output for runtime tests.

Fixes: 529441ca89 ("efi_loader: Disable devices before handing over control")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2020-11-12 21:26:28 +01:00
parent 832bfad745
commit fccd3d9c42
3 changed files with 15 additions and 4 deletions

View File

@ -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;

View File

@ -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();

View File

@ -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) {