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.g...@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.apalodi...@linaro.org>