diff options
author | Marcin Juszkiewicz <hrw@openedhand.com> | 2007-11-07 17:17:51 +0000 |
---|---|---|
committer | Marcin Juszkiewicz <hrw@openedhand.com> | 2007-11-07 17:17:51 +0000 |
commit | 404bbb63872d24f40a29b9a55615bc52bd4e2a1c (patch) | |
tree | 7a2b3a87f8bc228acc4107c315a8e09eab225fc8 /meta/packages/linux/linux-openmoko/fix-EVIOCGRAB-semantics.patch | |
parent | 83dd625f05d2a962d2115e92ff3ba08a072bc0ed (diff) | |
download | openembedded-core-404bbb63872d24f40a29b9a55615bc52bd4e2a1c.tar.gz openembedded-core-404bbb63872d24f40a29b9a55615bc52bd4e2a1c.tar.bz2 openembedded-core-404bbb63872d24f40a29b9a55615bc52bd4e2a1c.zip |
linux-openmoko: added 2.6.22.5 from OE, dropped linux-gta01
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3096 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/packages/linux/linux-openmoko/fix-EVIOCGRAB-semantics.patch')
-rw-r--r-- | meta/packages/linux/linux-openmoko/fix-EVIOCGRAB-semantics.patch | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/meta/packages/linux/linux-openmoko/fix-EVIOCGRAB-semantics.patch b/meta/packages/linux/linux-openmoko/fix-EVIOCGRAB-semantics.patch new file mode 100644 index 0000000000..3c96faa271 --- /dev/null +++ b/meta/packages/linux/linux-openmoko/fix-EVIOCGRAB-semantics.patch @@ -0,0 +1,97 @@ +diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c +index 12c7ab8..c7e741b 100644 +--- a/drivers/input/evdev.c ++++ b/drivers/input/evdev.c +@@ -29,7 +29,7 @@ struct evdev { + char name[16]; + struct input_handle handle; + wait_queue_head_t wait; +- struct evdev_list *grab; ++ int grab; + struct list_head list; + }; + +@@ -37,6 +37,7 @@ struct evdev_list { + struct input_event buffer[EVDEV_BUFFER_SIZE]; + int head; + int tail; ++ int grab; + struct fasync_struct *fasync; + struct evdev *evdev; + struct list_head node; +@@ -49,8 +50,7 @@ static void evdev_event(struct input_han + struct evdev *evdev = handle->private; + struct evdev_list *list; + +- if (evdev->grab) { +- list = evdev->grab; ++ list_for_each_entry(list, &evdev->list, node) { + + do_gettimeofday(&list->buffer[list->head].time); + list->buffer[list->head].type = type; +@@ -59,17 +59,7 @@ static void evdev_event(struct input_han + list->head = (list->head + 1) & (EVDEV_BUFFER_SIZE - 1); + + kill_fasync(&list->fasync, SIGIO, POLL_IN); +- } else +- list_for_each_entry(list, &evdev->list, node) { +- +- do_gettimeofday(&list->buffer[list->head].time); +- list->buffer[list->head].type = type; +- list->buffer[list->head].code = code; +- list->buffer[list->head].value = value; +- list->head = (list->head + 1) & (EVDEV_BUFFER_SIZE - 1); +- +- kill_fasync(&list->fasync, SIGIO, POLL_IN); +- } ++ } + + wake_up_interruptible(&evdev->wait); + } +@@ -104,9 +94,10 @@ static int evdev_release(struct inode * + { + struct evdev_list *list = file->private_data; + +- if (list->evdev->grab == list) { +- input_release_device(&list->evdev->handle); +- list->evdev->grab = NULL; ++ if (list->grab) { ++ if(!--list->evdev->grab && list->evdev->exist) ++ input_release_device(&list->evdev->handle); ++ list->grab = 0; + } + + evdev_fasync(-1, file, 0); +@@ -483,17 +474,19 @@ static long evdev_ioctl_handler(struct f + + case EVIOCGRAB: + if (p) { +- if (evdev->grab) +- return -EBUSY; +- if (input_grab_device(&evdev->handle)) ++ if (list->grab) + return -EBUSY; +- evdev->grab = list; ++ if (!evdev->grab++) ++ if (input_grab_device(&evdev->handle)) ++ return -EBUSY; ++ list->grab = 0; + return 0; + } else { +- if (evdev->grab != list) ++ if (!list->grab) + return -EINVAL; +- input_release_device(&evdev->handle); +- evdev->grab = NULL; ++ if (!--evdev->grab) ++ input_release_device(&evdev->handle); ++ list->grab = 0; + return 0; + } + +- +To unsubscribe from this list: send the line "unsubscribe linux-kernel" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html +Please read the FAQ at http://www.tux.org/lkml/ + |