patch-2.1.44 linux/drivers/sbus/char/sunkbd.c

Next file: linux/drivers/sbus/char/sunmouse.c
Previous file: linux/drivers/sbus/char/sunfb.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.43/linux/drivers/sbus/char/sunkbd.c linux/drivers/sbus/char/sunkbd.c
@@ -419,27 +419,27 @@
 
 	if(ch == SKBD_RESET) {
 		kbd_reset_pending = 1;
-		return;
+		goto out;
 	}
 	if(ch == SKBD_LYOUT) {
 		kbd_layout_pending = 1;
-		return;
+		goto out;
 	}
 	if(kbd_reset_pending) {
 		sunkbd_type = ch;
 		kbd_reset_pending = 0;
 		if(ch == SUNKBD_TYPE4)
 			send_cmd(SKBDCMD_GLAYOUT);
-		return;
+		goto out;
 	} else if(kbd_layout_pending) {
 		sunkbd_layout = ch;
 		kbd_layout_pending = 0;
-		return;
+		goto out;
 	} else if(ch == SKBD_ALLUP) {
 		del_timer (&auto_repeat_timer);
 		memset(key_down, 0, sizeof(key_down));
 		compute_shiftstate();
-		return;
+		goto out;
 	}
 #ifdef SKBD_DEBUG
 	if(ch == 0x7f)
@@ -456,11 +456,11 @@
 	} else {
 		keycode = ch;
 	}
-	add_keyboard_randomness(keycode);
 	
-	mark_bh(KEYBOARD_BH);
 	do_poke_blanked_console = 1;
 	mark_bh(CONSOLE_BH);
+	add_keyboard_randomness(keycode);
+
 	kbd = kbd_table + fg_console;
 	tty = ttytab[fg_console];
 	if((raw_mode = (kbd->kbdmode == VC_RAW))) {
@@ -491,11 +491,11 @@
 	}
 
 	if(raw_mode)
-		return;
+		goto out;
 
 	if(kbd->kbdmode == VC_MEDIUMRAW) {
 		put_queue(keycode + up_flag);
-		return;
+		goto out;
 	}
 
  	/*
@@ -545,6 +545,8 @@
 			compute_shiftstate();
 		}
 	}
+out:
+	mark_bh(KEYBOARD_BH);
 }
 
 static void put_queue(int ch)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov