HID: uhid: implement read() on uhid devices
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sun, 10 Jun 2012 13:16:16 +0000 (15:16 +0200)
committerColin Cross <ccross@android.com>
Thu, 16 Aug 2012 19:44:27 +0000 (12:44 -0700)
commitb8dd3d95cafc815793eb7a380be493eb5382710a
tree3cc57b126bd58fd78551697c5b9055adc0a790a0
parent191b03260fc0241e355e5cb200d5a9497e67e67c
HID: uhid: implement read() on uhid devices

User-space can use read() to get a single event from uhid devices. read()
does never return multiple events. This allows us to extend the event
structure and still keep backwards compatibility.

If user-space wants to get multiple events in one syscall, they should use
the readv()/writev() syscalls which are supported by uhid.

This introduces a new lock which helps us synchronizing simultaneous reads
from user-space. We also correctly return -EINVAL/-EFAULT only on errors
and retry the read() when some other thread captured the event faster than
we did.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/uhid.c