This fixes a use of flush_scheduled_work() in USB HID's reset logic that can deadlock. It's against the next tree. Signed-off-by: Oliver Neukum <oliver@xxxxxxxxxxx>Tested-by: Valdis Kletniks <Valdis.Kletnieks@xxxxxx> Regards Oliverdiff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.cindex bc017cd..4306cb1 100644--- a/drivers/hid/usbhid/hid-core.c+++ b/drivers/hid/usbhid/hid-core.c@@ -1210,7 +1210,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 */@@ -1222,6 +1221,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; ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥