|
|
ac3a84 |
From 7dec74695751b70a8a86eb647062e7d5a5157446 Mon Sep 17 00:00:00 2001
|
|
|
ac3a84 |
From: Jan Janssen <medhefgo@web.de>
|
|
|
ac3a84 |
Date: Sun, 27 Nov 2022 13:56:18 +0100
|
|
|
ac3a84 |
Subject: [PATCH] boot: Only do full driver initialization in VMs
|
|
|
ac3a84 |
|
|
|
ac3a84 |
Doing the reconnect dance on some real firmware creates huge delays on
|
|
|
ac3a84 |
boot. This should not be needed anymore as we now ask the firmware to
|
|
|
ac3a84 |
make console devices and xbootldr partitions available explicitly in a
|
|
|
ac3a84 |
more targeted fashion.
|
|
|
ac3a84 |
|
|
|
ac3a84 |
Fixes: #25510
|
|
|
ac3a84 |
(cherry picked from commit f6d59e2ebfc1bf50683a2e640aad501c372a50e4)
|
|
|
ac3a84 |
|
|
|
ac3a84 |
Related: #2138081
|
|
|
ac3a84 |
---
|
|
|
ac3a84 |
src/boot/efi/boot.c | 6 ------
|
|
|
ac3a84 |
src/boot/efi/vmm.c | 4 ++++
|
|
|
ac3a84 |
2 files changed, 4 insertions(+), 6 deletions(-)
|
|
|
ac3a84 |
|
|
|
ac3a84 |
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
|
|
|
ac3a84 |
index e182ee7840..5944451e6a 100644
|
|
|
ac3a84 |
--- a/src/boot/efi/boot.c
|
|
|
ac3a84 |
+++ b/src/boot/efi/boot.c
|
|
|
ac3a84 |
@@ -2662,12 +2662,6 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
|
|
|
ac3a84 |
/* Uncomment the next line if you need to wait for debugger. */
|
|
|
ac3a84 |
// debug_break();
|
|
|
ac3a84 |
|
|
|
ac3a84 |
- /* The firmware may skip initializing some devices for the sake of a faster boot. This is especially
|
|
|
ac3a84 |
- * true for fastboot enabled firmwares. But this means that things we use like input devices or the
|
|
|
ac3a84 |
- * xbootldr partition may not be available yet. Reconnect all drivers should hopefully make the
|
|
|
ac3a84 |
- * firmware initialize everything we need. */
|
|
|
ac3a84 |
- (void) reconnect_all_drivers();
|
|
|
ac3a84 |
-
|
|
|
ac3a84 |
err = BS->OpenProtocol(image,
|
|
|
ac3a84 |
&LoadedImageProtocol,
|
|
|
ac3a84 |
(void **)&loaded_image,
|
|
|
ac3a84 |
diff --git a/src/boot/efi/vmm.c b/src/boot/efi/vmm.c
|
|
|
ac3a84 |
index b1bfd778fc..2260b217b7 100644
|
|
|
ac3a84 |
--- a/src/boot/efi/vmm.c
|
|
|
ac3a84 |
+++ b/src/boot/efi/vmm.c
|
|
|
ac3a84 |
@@ -83,6 +83,10 @@ EFI_STATUS vmm_open(EFI_HANDLE *ret_vmm_dev, EFI_FILE **ret_vmm_dir) {
|
|
|
ac3a84 |
assert(ret_vmm_dev);
|
|
|
ac3a84 |
assert(ret_vmm_dir);
|
|
|
ac3a84 |
|
|
|
ac3a84 |
+ /* Make sure all file systems have been initialized. Only do this in VMs as this is slow
|
|
|
ac3a84 |
+ * on some real firmwares. */
|
|
|
ac3a84 |
+ (void) reconnect_all_drivers();
|
|
|
ac3a84 |
+
|
|
|
ac3a84 |
/* find all file system handles */
|
|
|
ac3a84 |
err = BS->LocateHandleBuffer(ByProtocol, &FileSystemProtocol, NULL, &n_handles, &handles);
|
|
|
ac3a84 |
if (err != EFI_SUCCESS)
|