diff options
| author | Alan Stern <[email protected]> | 2016-03-23 12:17:09 -0400 | 
|---|---|---|
| committer | Jiri Kosina <[email protected]> | 2016-03-24 15:26:20 +0100 | 
| commit | 972e6a993f278b416a8ee3ec65475724fc36feb2 (patch) | |
| tree | 89e205596257268d95037d088cb9f2f165f56725 /tools/perf/scripts/python/compaction-times.py | |
| parent | d30596737e8e7b2f1235d7ba20592b8309e3af04 (diff) | |
HID: usbhid: fix inconsistent reset/resume/reset-resume behavior
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.
Signed-off-by: Alan Stern <[email protected]>
Reported-by: Daniel Fraga <[email protected]>
Tested-by: Daniel Fraga <[email protected]>
CC: <[email protected]>
Signed-off-by: Jiri Kosina <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/compaction-times.py')
0 files changed, 0 insertions, 0 deletions