nalika / rpms / grub2

Forked from rpms/grub2 2 years ago
Clone

Blame SOURCES/0491-at_keyboard-Fix-unreliable-key-presses.patch

b32e65
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
b32e65
From: Michael Bideau <mica.devel@gmail.com>
b32e65
Date: Wed, 2 Oct 2019 23:48:10 +0200
b32e65
Subject: [PATCH] at_keyboard: Fix unreliable key presses
b32e65
b32e65
This patch fixes an issue that prevented the at_keyboard module to work
b32e65
(for me). The cause was a bad/wrong return value in the
b32e65
grub_at_keyboard_getkey() function in grub-core/term/at_keyboard.c file
b32e65
at line 237. My symptoms were to have an unresponsive keyboard. Keys
b32e65
needed to be pressed 10x and more to effectively be printed sometimes
b32e65
generating multiple key presses (after 1 or 2 sec of no printing). It
b32e65
was very problematic when typing passphrase in early stage (with
b32e65
GRUB_ENABLE_CRYPTODISK). When switched to "console" terminal input
b32e65
keyboard worked perfectly. It also worked great with the GRUB 2.02
b32e65
packaged by Debian (2.02+dfsg1-20). It was not an output issue but an
b32e65
input one.
b32e65
b32e65
I've managed to analyze the issue and found that it came from the commit
b32e65
216950a4e (at_keyboard: Split protocol from controller code.). Three
b32e65
lines where moved from the fetch_key() function in
b32e65
grub-core/term/at_keyboard.c file to the beginning of
b32e65
grub_at_keyboard_getkey() function (same file). However, returning -1
b32e65
made sense when it happened in fetch_key() function but not anymore in
b32e65
grub_at_keyboard_getkey() function which should return GRUB_TERM_NO_KEY.
b32e65
I think it was just an incomplete cut-paste missing a small manual
b32e65
correction. Let's fix it.
b32e65
b32e65
Note: Commit message updated by Daniel Kiper.
b32e65
b32e65
Signed-off-by: Michael Bideau <mica.devel@gmail.com>
b32e65
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
b32e65
(cherry picked from commit 33203ca3484717712b54e199c46ae8a818374284)
b32e65
---
b32e65
 grub-core/term/at_keyboard.c | 2 +-
b32e65
 1 file changed, 1 insertion(+), 1 deletion(-)
b32e65
b32e65
diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
b32e65
index c805cccbd..dac0f946f 100644
b32e65
--- a/grub-core/term/at_keyboard.c
b32e65
+++ b/grub-core/term/at_keyboard.c
b32e65
@@ -318,7 +318,7 @@ grub_at_keyboard_getkey (struct grub_term_input *term __attribute__ ((unused)))
b32e65
     return GRUB_TERM_NO_KEY;
b32e65
 
b32e65
   if (! KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS)))
b32e65
-    return -1;
b32e65
+    return GRUB_TERM_NO_KEY;
b32e65
   at_key = grub_inb (KEYBOARD_REG_DATA);
b32e65
   old_led = ps2_state.led_status;
b32e65