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

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