x86: option to disable the keyboard
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Aug 2013 20:18:28 +0000 (13:18 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Aug 2013 20:18:28 +0000 (13:18 -0700)
To avoid some SMM overheads on machines with USB keyboards.

Without this, simply sitting in the kernel monitor on core 0 has a massive
performance hit on some benchmarks (10-15x for fluidanimate).

Note that sitting in the monitor still has an effect on performance, for now,
even with the KB disabled.

kern/arch/x86/Kconfig
kern/arch/x86/console.c

index cb05eb7..f15a4a7 100644 (file)
@@ -58,4 +58,16 @@ config KB_CORE0_ONLY
                Say 'n' unless you are using a buggy x86 machine that can't handle
                polling the keyboard PIO from cores other than core 0.
 
+config X86_DISABLE_KEYBOARD
+       bool "Disable Keyboard"
+       default n
+       help
+               x86 machines with a legacy USB keyboard often implement the USB stack
+               in SMM mode.  When doing anything with the keyboard, including polling
+               the keyboard from the kernel monitor, SMM mode can dramatically
+               interfere with other cores (like a 10-15x performance impact on some
+               benchmarks).
+               
+               Say 'y' if you have such a machine and do not need the keyboard.
+
 endmenu
index 5ce619c..2390c24 100644 (file)
@@ -497,6 +497,12 @@ static bool SLOCKED(&lock) crt_scrolled = FALSE;
 static int
 kbd_proc_data(void)
 {
+#ifdef CONFIG_X86_DISABLE_KEYBOARD
+       /* on some machines with usb keyboards, any keyboard input triggers SMM
+        * interference on all of the cores. */
+       return -1;
+#endif /* CONFIG_X86_DISABLE_KEYBOARD */
+
        int c;
        uint8_t data;