Skip to content

Commit

Permalink
HID: autosuspend -- fix lockup of hid on reset
Browse files Browse the repository at this point in the history
This fixes a use of flush_scheduled_work() in USB HID's reset logic that can
deadlock.

Tested-by: Valdis Kletniks <Valdis.Kletnieks@vt.edu>
Signed-off-by: Oliver Neukum <oliver@neukum.name>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Oliver Neukum authored and Jiri Kosina committed Mar 25, 2009
1 parent ae2f007 commit 6d77976
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/hid/usbhid/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1207,7 +1207,6 @@ static void hid_cease_io(struct usbhid_device *usbhid)
usb_kill_urb(usbhid->urbin);
usb_kill_urb(usbhid->urbctrl);
usb_kill_urb(usbhid->urbout);
flush_scheduled_work();
}

/* Treat USB reset pretty much the same as suspend/resume */
Expand All @@ -1219,6 +1218,7 @@ static int hid_pre_reset(struct usb_interface *intf)
spin_lock_irq(&usbhid->lock);
set_bit(HID_RESET_PENDING, &usbhid->iofl);
spin_unlock_irq(&usbhid->lock);
cancel_work_sync(&usbhid->restart_work);
hid_cease_io(usbhid);

return 0;
Expand Down

0 comments on commit 6d77976

Please sign in to comment.