From 2e7f25256de20cc624feb87e06e423b108188854 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Fri, 16 Jan 2004 08:57:55 +0100 Subject: [PATCH] input: Alt-arrow console switch is routinely dropped under high load. This patch fixes it: alt-arrow has to start from console _we want to switch to_, if switch is already pending. --- drivers/char/keyboard.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c index 129a2fb08a096..f628d15009074 100644 --- a/drivers/char/keyboard.c +++ b/drivers/char/keyboard.c @@ -493,9 +493,13 @@ static void fn_lastcons(struct vc_data *vc, struct pt_regs *regs) static void fn_dec_console(struct vc_data *vc, struct pt_regs *regs) { - int i; - - for (i = fg_console-1; i != fg_console; i--) { + int i, cur = fg_console; + + /* Currently switching? Queue this next switch relative to that. */ + if (want_console != -1) + cur = want_console; + + for (i = cur-1; i != cur; i--) { if (i == -1) i = MAX_NR_CONSOLES-1; if (vc_cons_allocated(i)) @@ -506,9 +510,13 @@ static void fn_dec_console(struct vc_data *vc, struct pt_regs *regs) static void fn_inc_console(struct vc_data *vc, struct pt_regs *regs) { - int i; + int i, cur = fg_console; + + /* Currently switching? Queue this next switch relative to that. */ + if (want_console != -1) + cur = want_console; - for (i = fg_console+1; i != fg_console; i++) { + for (i = cur+1; i != cur; i++) { if (i == MAX_NR_CONSOLES) i = 0; if (vc_cons_allocated(i)) -- 2.53.0