49 lines
1.8 KiB
Diff
49 lines
1.8 KiB
Diff
From 94ffe4f51fb990760d68eb2f5eb8fa0dda3a7e7a Mon Sep 17 00:00:00 2001
|
|
From: Michael Chang <mchang@suse.com>
|
|
Date: Tue, 25 May 2021 06:45:01 +0000
|
|
Subject: [PATCH] Disable timer check in file loading
|
|
|
|
The u-boot efi console service registers a timer to poll the keyboard
|
|
input in every 50ns. In the efi block io service, this timer is
|
|
evaluated on each block read, and since the timer interval is much less
|
|
than the time needed to reading out a block (32kB) from the disk, the
|
|
keyboard polling is therefore in the wake of each block read.
|
|
|
|
Unfortunately USB keyboard spends too much time in polling. In my test
|
|
usb_kbd_poll_for_event costs 40ms in usb_kbd_testc() to test if a
|
|
character is in the queue. In combination with the number of blocks to
|
|
be read from the disk, the extra amound of time delayed could be around
|
|
30 seconds to load linux and initrd.
|
|
|
|
For that matters, the timer check is disabled in file loading to speed
|
|
it up. The consequence would be losing the keystroke during the time
|
|
file is loading, but that is acceptable IMHO.
|
|
|
|
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
|
---
|
|
lib/efi_loader/efi_disk.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
|
|
index d2256713a8..4f82b5397c 100644
|
|
--- a/lib/efi_loader/efi_disk.c
|
|
+++ b/lib/efi_loader/efi_disk.c
|
|
@@ -19,6 +19,7 @@
|
|
#include <log.h>
|
|
#include <part.h>
|
|
#include <malloc.h>
|
|
+#include <watchdog.h>
|
|
|
|
struct efi_system_partition efi_system_partition = {
|
|
.uclass_id = UCLASS_INVALID,
|
|
@@ -142,8 +143,7 @@ static efi_status_t efi_disk_rw_blocks(struct efi_block_io *this,
|
|
n = blk_dwrite(desc, lba, blocks, buffer);
|
|
}
|
|
|
|
- /* We don't do interrupts, so check for timers cooperatively */
|
|
- efi_timer_check();
|
|
+ schedule();
|
|
|
|
EFI_PRINT("n=%lx blocks=%x\n", n, blocks);
|
|
|