On Tue, 2014-09-02 at 11:39 -0400, Alan Stern wrote: > This patch changes the way usbhid carries out Clear-Halt and reset. > > Currently, after a Clear-Halt on the interrupt-IN endpoint, the driver > immediately restarts the interrupt URB, even if the Clear-Halt failed. > This doesn't work out well when the reason for the failure was that > the device was disconnected (when a low- or full-speed device is > connected through a hub to an EHCI controller, transfer errors caused > by disconnection are reported as stalls by the hub). Instead now the > driver will attempt a reset after a failed Clear-Halt. > > The way resets are carried out is also changed. Now the driver will > call usb_queue_reset_device() instead of calling usb_reset_device() > directly. This avoids a deadlock that would arise when a device is > unplugged: The hid_reset() routine runs as a workqueue item, a reset > attempt after the device has been unplugged will fail, failure will > cause usbhid to be unbound, and the disconnect routine will try to do > cancel_work_sync(). The usb_queue_reset_device() implementation is > carefully written to handle scenarios like this one properly. Please disregard my first analysis, I missed a check of the open counter. Regards Oliver -- 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