Re: [PATCH] USBHID: fix inconsistent reset/resume/reset-resume behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 23 Mar 2016, Alan Stern wrote:

> The usbhid driver has inconsistently duplicated code in its post-reset,
> resume, and reset-resume pathways.
> 
> 	reset-resume doesn't check HID_STARTED before trying to
> 	restart the I/O queues.
> 
> 	resume fails to clear the HID_SUSPENDED flag if HID_STARTED
> 	isn't set.
> 
> 	resume calls usbhid_restart_queues() with usbhid->lock held
> 	and the others call it without holding the lock.
> 
> The first item in particular causes a problem following a reset-resume
> if the driver hasn't started up its I/O.  URB submission fails because
> usbhid->urbin is NULL, and this triggers an unending reset-retry loop.
> 
> This patch fixes the problem by creating a new subroutine,
> hid_restart_io(), to carry out all the common activities.  It also
> adds some checks that were missing in the original code:
> 
> 	After a reset, there's no need to clear any halted endpoints.
> 
> 	After a resume, if a reset is pending there's no need to
> 	restart any I/O until the reset is finished.
> 
> 	After a resume, if the interrupt-IN endpoint is halted there's
> 	no need to submit the input URB until the halt has been
> 	cleared.

In addition to this being an actual fix, it's a nice cleanup as well.

Thanks a lot; queuing for 4.6.

-- 
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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux