On Sun, 22 Mar 2009, Oliver Neukum wrote: > 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 > Oliver > diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c > index 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; Applied to autosuspend branch, thanks a lot Oliver. -- Jiri Kosina SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html