xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Wed Nov 5 08:52:06 PST 2008


 hw/xfree86/os-support/linux/lnx_init.c |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

New commits:
commit 446d9443cea31e493d05c939d0128a8116788468
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Nov 5 11:51:06 2008 -0500

    linux: Drain the console fd of data when using evdev for keyboards
    
    Works around a silly bug in the kernel that causes wakeup storms after
    too many keypresses.  Should fix the kernel bug too, but this at least
    keeps the idle wakeup count below 1000/sec.

diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 6f68ba5..da5ca57 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -85,6 +85,14 @@ restoreVtPerms(void)
     chown(vtname, vtPermSave[2], vtPermSave[3]);
 }
 
+static void *console_handler;
+
+static void
+drain_console(int fd, void *closure)
+{
+    tcflush(fd, TCIOFLUSH);
+}
+
 void
 xf86OpenConsole(void)
 {
@@ -300,6 +308,10 @@ xf86OpenConsole(void)
 		cfsetispeed(&nTty, 9600);
 		cfsetospeed(&nTty, 9600);
 		tcsetattr(xf86Info.consoleFd, TCSANOW, &nTty);
+
+		/* need to keep the buffer clean, else the kernel gets angry */
+		console_handler = xf86AddGeneralHandler(xf86Info.consoleFd,
+							drain_console, NULL);
 	    }
 
 	    /* we really should have a InitOSInputDevices() function instead
@@ -346,6 +358,11 @@ xf86CloseConsole()
 
     if (ShareVTs) return;
 
+    if (console_handler) {
+	xf86RemoveGeneralHandler(console_handler);
+	console_handler = NULL;
+    };
+
 #if defined(DO_OS_FONTRESTORE)
     if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts) < 0)
 	xf86Msg(X_WARNING, "xf86CloseConsole: VT_GETSTATE failed: %s\n",


More information about the xorg-commit mailing list