On Thu, 6 May 2010, Alan Stern wrote: > On Thu, 6 May 2010, Bruno [UTF-8] Prémont wrote: > > > > Bruno, can you confirm that the hang occurs during one of those > > > cancel_work_sync() calls? > > > > No, it's not one of the cancel_work_sync() that hangs but it's the > > del_timer_sync() right before them that hangs! > > (del_timer_sync() also hangs if I put it last, so the cancel_work_sync() > > don't hang anything) > > > > static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid) > > { > > del_timer_sync(&usbhid->io_retry); /* this one never returns */ > > cancel_work_sync(&usbhid->restart_work); > > cancel_work_sync(&usbhid->reset_work); > > } > > Okay, I see what the problem is. In usbhid_start() there's a bunch of > statements initializing parts of the usbhid structure. When probing > fails those statements don't get executed, so the timer and workqueue > things aren't set up properly. > > This patch should fix it. Indeed, good catch, thanks a lot Alan! Could you please send to me with your Signed-off-by: line and short changelog, so that I could apply it with proper credit being given to you? And Bruno, thanks a lot for excellent testing efforts. -- Jiri Kosina SUSE Labs, Novell Inc. _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm