nalika / rpms / grub2

Forked from rpms/grub2 2 years ago
Clone

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

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