+}
diff --git a/hid-linux.c b/hid-linux.c
new file mode 100644
-index 0000000..51f70c2
+index 0000000..00790b5
--- /dev/null
+++ b/hid-linux.c
-@@ -0,0 +1,538 @@
+@@ -0,0 +1,501 @@
+/*
+ * QEMU hid-linux /dev/input driver
+ *
+#include <assert.h>
+#include <time.h>
+#include <sys/time.h>
-+#include <poll.h>
+
+#define HID_LINUX_XS_PATH "/local/domain/0/hid_linux"
+#define ABS(x) ((x) > 0 ? (x) : -(x))
+ int fd = *(int *)opaque;
+
+ read_sz = read(fd, event, sizeof (event));
-+ if (read_sz <= 0)
-+ return;
+ for (i = 0; i < read_sz / (sizeof (struct input_event)); i++)
+ {
+ if (event[i].type == EV_KEY &&
+ int fd = *(int *)opaque;
+
+ read_sz = read(fd, event, sizeof (event));
-+ if (read_sz <= 0)
-+ return;
+ for (i = 0; i < read_sz / (sizeof (struct input_event)); i++)
+ {
+ if (event[i].type == EV_KEY &&
+ assert(hid_linux_driver.secure_key);
+
+ read_sz = read(fd, event, sizeof (event));
-+ if (read_sz <= 0)
-+ return;
+ for (i = 0; i < read_sz / (sizeof (struct input_event)); i++)
+ if (event[i].type == EV_KEY && event[i].code < BTN_MOUSE &&
+ event[i].value > 0)
+ return 1;
+}
+
-+static void hid_linux_check_dead_fd(void)
-+{
-+ struct pollfd pfds[HID_LINUX_MAX_DEV];
-+
-+ for (int i = 0; i < HID_LINUX_MAX_DEV; i++)
-+ {
-+ pfds[i].fd = hid_linux_driver.evdev_fds[i];
-+ pfds[i].events = 0;
-+ }
-+
-+ int ret = poll(pfds, HID_LINUX_MAX_DEV, 1 /* timeout */);
-+ if (ret == 0) // nothing to tell
-+ return;
-+ if (ret < 0) // error
-+ {
-+ DEBUG("poll failed: %s\n", strerror(errno));
-+ return;
-+ }
-+
-+ for (int i = 0; i < HID_LINUX_MAX_DEV; i++)
-+ if (pfds[i].revents & POLLERR)
-+ {
-+ DEBUG("dead fd: %d\n", hid_linux_driver.evdev_fds[i]);
-+ close(hid_linux_driver.evdev_fds[i]);
-+ hid_linux_driver.evdev_fds[i] = -1;
-+ }
-+}
-+
+void hid_linux_probe(int grab __attribute__((unused)))
+{
-+ hid_linux_check_dead_fd();
-+
+ for (int i = 0; i < HID_LINUX_MAX_DEV; i++)
+ {
+ int fd;
#ifndef CONFIG_STUBDOM
diff --git a/xen-hooks.mak b/xen-hooks.mak
-index d171928..15ba4d1 100644
+index 3b60724..8dc3885 100644
--- a/xen-hooks.mak
+++ b/xen-hooks.mak
@@ -37,6 +37,8 @@ OBJS += helper2.o