Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:mbrugger:branches:RPi5
u-boot
0013-Disable-timer-check-in-file-loading.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0013-Disable-timer-check-in-file-loading.patch of Package u-boot
From eb920203b4f5c1712524bf362991587ff24512d2 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 f0d76113b00..314af7e2022 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);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor