On Tue, 2 Sep 2014, 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.
> 
> Signed-off-by: Alan Stern <st...@rowland.harvard.edu>

And I actually like the way this makes hid_reset() nicer code as a bonus.

Applied, thanks Alan.

-- 
Jiri Kosina
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to