summaryrefslogtreecommitdiffstats
path: root/src/boot
diff options
context:
space:
mode:
authorJan Janssen <medhefgo@web.de>2022-11-27 13:56:18 +0100
committerJan Janssen <medhefgo@web.de>2022-11-29 15:05:56 +0100
commitf6d59e2ebfc1bf50683a2e640aad501c372a50e4 (patch)
tree2dd0980a7ae2425eb0ab181b231351a7bf5d6555 /src/boot
parentboot: Make sure all partitions drivers are connected (diff)
downloadsystemd-f6d59e2ebfc1bf50683a2e640aad501c372a50e4.tar.xz
systemd-f6d59e2ebfc1bf50683a2e640aad501c372a50e4.zip
boot: Only do full driver initialization in VMs
Doing the reconnect dance on some real firmware creates huge delays on boot. This should not be needed anymore as we now ask the firmware to make console devices and xbootldr partitions available explicitly in a more targeted fashion. Fixes: #25510
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/efi/boot.c6
-rw-r--r--src/boot/efi/vmm.c4
2 files changed, 4 insertions, 6 deletions
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
index 9123c9a84c..9a562dcf22 100644
--- a/src/boot/efi/boot.c
+++ b/src/boot/efi/boot.c
@@ -2638,12 +2638,6 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
/* Uncomment the next line if you need to wait for debugger. */
// debug_break();
- /* The firmware may skip initializing some devices for the sake of a faster boot. This is especially
- * true for fastboot enabled firmwares. But this means that things we use like input devices or the
- * xbootldr partition may not be available yet. Reconnect all drivers should hopefully make the
- * firmware initialize everything we need. */
- (void) reconnect_all_drivers();
-
err = BS->OpenProtocol(image,
&LoadedImageProtocol,
(void **)&loaded_image,
diff --git a/src/boot/efi/vmm.c b/src/boot/efi/vmm.c
index b1bfd778fc..2260b217b7 100644
--- a/src/boot/efi/vmm.c
+++ b/src/boot/efi/vmm.c
@@ -83,6 +83,10 @@ EFI_STATUS vmm_open(EFI_HANDLE *ret_vmm_dev, EFI_FILE **ret_vmm_dir) {
assert(ret_vmm_dev);
assert(ret_vmm_dir);
+ /* Make sure all file systems have been initialized. Only do this in VMs as this is slow
+ * on some real firmwares. */
+ (void) reconnect_all_drivers();
+
/* find all file system handles */
err = BS->LocateHandleBuffer(ByProtocol, &FileSystemProtocol, NULL, &n_handles, &handles);
if (err != EFI_SUCCESS)