HID: usbhid: check for suspend or reset before restarting
authorAlan Stern <stern@rowland.harvard.edu>
Thu, 19 Jul 2012 20:08:54 +0000 (16:08 -0400)
committerJiri Kosina <jkosina@suse.cz>
Fri, 20 Jul 2012 09:24:25 +0000 (11:24 +0200)
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>
drivers/hid/usbhid/hid-core.c

index 271578b..4309c03 100644 (file)
@@ -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))) {