]> git.hungrycats.org Git - linux/commitdiff
input: Alt-arrow console switch is routinely dropped under high load. This
authorPavel Machek <pavel@suse.cz>
Fri, 16 Jan 2004 07:57:55 +0000 (08:57 +0100)
committerVojtech Pavlik <vojtech@suse.cz>
Fri, 16 Jan 2004 07:57:55 +0000 (08:57 +0100)
patch fixes it: alt-arrow has to start from console _we want to switch
to_, if switch is already pending.

drivers/char/keyboard.c

index 129a2fb08a096303ee493229003c0e97261ee7f7..f628d15009074eebb884ba29cb0756b1613bc1a2 100644 (file)
@@ -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))