HID: usbhid: discarded events don't abort idleness
authorOliver Neukum <oneukum@suse.com>
Thu, 5 Nov 2015 11:55:27 +0000 (12:55 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 23 Nov 2015 14:46:03 +0000 (15:46 +0100)
If an event is discarded the device stays idle.  Just reverse the order of
check and marking busy.

Found by code inspection.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/usbhid/hid-core.c

index 36712e9f56c26d9ae96ddb5cfa4baada0b681f04..19a4364c908569f3c345bc0796ce5b3845c4ab22 100644 (file)
@@ -274,10 +274,10 @@ static void hid_irq_in(struct urb *urb)
 
        switch (urb->status) {
        case 0:                 /* success */
-               usbhid_mark_busy(usbhid);
                usbhid->retry_delay = 0;
                if ((hid->quirks & HID_QUIRK_ALWAYS_POLL) && !hid->open)
                        break;
+               usbhid_mark_busy(usbhid);
                if (!test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) {
                        hid_input_report(urb->context, HID_INPUT_REPORT,
                                         urb->transfer_buffer,