[PATCH 3/3] efi_loader: Move device-removal later in exit-boot-services
Simon Glass
sjg at chromium.org
Sun Apr 6 00:12:47 CEST 2025
This removal should be the last thing done, so that U-Boot does no more
memory allocations afterwards. Move it and add a comment.
Note that the TCG2 log is updated after this call, but I cannot see any
allocations there.
Reported-by: Christian Kohlschütter <christian at kohlschutter.com>
Signed-off-by: Simon Glass <sjg at chromium.org>
---
lib/efi_loader/efi_boottime.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index ffe43accd1e..e525662f82f 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -2250,14 +2250,6 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
list_del(&evt->link);
}
- if (!efi_st_keep_devices) {
- bootm_disable_interrupts();
- if (IS_ENABLED(CONFIG_USB_DEVICE))
- udc_disconnect();
- board_quiesce_devices();
- dm_remove_devices_active();
- }
-
/* Patch out unsupported runtime function */
efi_runtime_detach();
@@ -2279,6 +2271,19 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
/* Give the payload some time to boot */
efi_set_watchdog(0);
schedule();
+
+ /*
+ * this should be the last thing done, to avoid memory allocations
+ * between removing devices and the OS taking over
+ */
+ if (!efi_st_keep_devices) {
+ bootm_disable_interrupts();
+ if (IS_ENABLED(CONFIG_USB_DEVICE))
+ udc_disconnect();
+ board_quiesce_devices();
+ dm_remove_devices_active();
+ }
+
out:
if (IS_ENABLED(CONFIG_EFI_TCG2_PROTOCOL)) {
if (ret != EFI_SUCCESS)
--
2.43.0
base-commit: bcfa94be955ef263d37918ef4b8f898ee8964c61
branch: eth
More information about the U-Boot
mailing list