3be9268318
Some terminals, like `grub-core/term/at_keyboard.c`, return `-1` in case they are not ready yet. if (! KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS))) return -1; Currently, that is treated as a key press, and the menu time-out is cancelled/cleared. This is unwanted, as the boot is stopped and the user manually has to select a menu entry. Therefore, adapt the condition to require the key value also to be greater than 0. `GRUB_TERM_NO_KEY` is defined as 0, so the condition could be collapsed to greater or equal than (≥) 0, but the compiler will probably do that for us anyway, so keep the cases separate for clarity. This is tested with coreboot, the GRUB default payload, and the configuration file `grub.cfg` below. For GRUB: $ ./autogen.sh $ ./configure --with-platform=coreboot $ make -j`nproc` $ make default_payload.elf For coreboot: $ more grub.cfg serial --unit 0 --speed 115200 set timeout=5 menuentry 'halt' { halt } $ build/cbfstool build/coreboot.rom add-payload \ -f /dev/shm/grub/default_payload.elf -n fallback/payload -c lzma $ build/cbfstool build/coreboot.rom add -f grub.cfg -n etc/grub.cfg -t raw $ qemu-system-x86_64 --version QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-2+b1) Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers $ qemu-system-x86_64 -M pc -bios build/coreboot.rom -serial stdio -nic none Currently, the time-out is cancelled/cleared. With the commit, it is not. With a small GRUB payload, this the problem is also reproducible on the ASRock E350M1. Link: http://lists.gnu.org/archive/html/grub-devel/2019-01/msg00037.html Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> |
||
---|---|---|
.. | ||
boot | ||
bus | ||
commands | ||
disk | ||
efiemu | ||
font | ||
fs | ||
gdb | ||
gettext | ||
gfxmenu | ||
gnulib | ||
hello | ||
hook | ||
io | ||
kern | ||
lib | ||
loader | ||
mmap | ||
net | ||
normal | ||
osdep | ||
partmap | ||
parttool | ||
script | ||
term | ||
tests | ||
video | ||
gdb_grub.in | ||
genemuinit.sh | ||
genemuinitheader.sh | ||
genmod.sh.in | ||
genmoddep.awk | ||
gensyminfo.sh.in | ||
gensymlist.sh | ||
gentrigtables.c | ||
gmodule.pl.in | ||
gnulib-fix-gcc7-fallthrough.diff | ||
gnulib-fix-null-deref.diff | ||
gnulib-fix-width.diff | ||
gnulib-no-abort.diff | ||
gnulib-no-gets.diff | ||
Makefile.am | ||
Makefile.core.def | ||
modinfo.sh.in |