| From bc93e042a1e03ae70e6cd58180419342b0866909 Mon Sep 17 00:00:00 2001 |
| From: Marcel Holtmann <marcel@holtmann.org> |
| Date: Wed, 4 Dec 2019 03:37:13 +0100 |
| Subject: [PATCH] HID: hidraw: Fix returning EPOLLOUT from hidraw_poll |
| |
| commit 9f3b61dc1dd7b81e99e7ed23776bb64a35f39e1a upstream. |
| |
| When polling a connected /dev/hidrawX device, it is useful to get the |
| EPOLLOUT when writing is possible. Since writing is possible as soon as |
| the device is connected, always return it. |
| |
| Right now EPOLLOUT is only returned when there are also input reports |
| are available. This works if devices start sending reports when |
| connected, but some HID devices might need an output report first before |
| sending any input reports. This change will allow using EPOLLOUT here as |
| well. |
| |
| Fixes: 378b80370aa1 ("hidraw: Return EPOLLOUT from hidraw_poll") |
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Jiri Kosina <jkosina@suse.cz> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c |
| index bbc6ec1aa5cb..c25e95c19cad 100644 |
| --- a/drivers/hid/hidraw.c |
| +++ b/drivers/hid/hidraw.c |
| @@ -252,10 +252,10 @@ static __poll_t hidraw_poll(struct file *file, poll_table *wait) |
| |
| poll_wait(file, &list->hidraw->wait, wait); |
| if (list->head != list->tail) |
| - return EPOLLIN | EPOLLRDNORM | EPOLLOUT; |
| + return EPOLLIN | EPOLLRDNORM; |
| if (!list->hidraw->exist) |
| return EPOLLERR | EPOLLHUP; |
| - return 0; |
| + return EPOLLOUT | EPOLLWRNORM; |
| } |
| |
| static int hidraw_open(struct inode *inode, struct file *file) |
| -- |
| 2.7.4 |
| |