diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2012-07-19 16:08:54 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2012-07-20 11:24:25 +0200 |
commit | d4150c8f3d80b4a9387083478a86da8b3390dd83 (patch) | |
tree | 8a7dd3e89587dc3f986dc83c2ce40e91a96dac24 /drivers/hid | |
parent | f2b5264d4f77328e45d73cd135772b6e88a4951a (diff) | |
download | talos-op-linux-d4150c8f3d80b4a9387083478a86da8b3390dd83.tar.gz talos-op-linux-d4150c8f3d80b4a9387083478a86da8b3390dd83.zip |
HID: usbhid: check for suspend or reset before restarting
This patch (as1596) improves the queue-restart logic in usbhid by
checking to see if the device is suspended or a reset is about to
occur. There's no point submitting an URB if either of those is
true.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: Oliver Neukum <oliver@neukum.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid')
-rw-r--r-- | drivers/hid/usbhid/hid-core.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 271578b85d91..4309c03038f6 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -207,7 +207,8 @@ static int usbhid_restart_out_queue(struct usbhid_device *usbhid) int kicked; int r; - if (!hid) + if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || + test_bit(HID_SUSPENDED, &usbhid->iofl)) return 0; if ((kicked = (usbhid->outhead != usbhid->outtail))) { @@ -245,7 +246,8 @@ static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid) int r; WARN_ON(hid == NULL); - if (!hid) + if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) || + test_bit(HID_SUSPENDED, &usbhid->iofl)) return 0; if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) { |