Re: [PATCH 3/3] efi_loader: Move device-removal later in exit-boot-services

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Apr 6 00:30:15 CEST 2025


Am 6. April 2025 00:12:47 MESZ schrieb Simon Glass <sjg at chromium.org>:
>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>

This commit message fails to describe which problem has been observed and you try to solve.

A link to the original communication would be helpful.

Furthermore, please, rebase it on my patch adding eth_halt().
<https://lore.kernel.org/u-boot/CAFLszTgp38yBXnSigfT-mEFU=rqyAKjp0WBQGgHP_N3vRxCq=Q@mail.gmail.com/T/#m1e55cc094f575797da3b4aed6b369544f8d6f8f4>

Best regards

Heinrich

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



More information about the U-Boot mailing list