USB: EHCI: improve handling of the ehci->iaa_in_progress flag
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 25 Jan 2016 20:44:16 +0000 (15:44 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Feb 2016 21:14:52 +0000 (13:14 -0800)
commitf96fba0dbf8f6b0eaa313b4c230f93c9bb0dd759
tree71a582d57c0b91863595d06c8008b5debb05d219
parentfcc5184ec1521c7d85124421e593660c94e9a9fb
USB: EHCI: improve handling of the ehci->iaa_in_progress flag

This patch improves the way ehci-hcd handles the iaa_in_progress flag.
The current code is somewhat careless in this regard:

The flag is meaningless when the root hub isn't running, most
particularly after the root hub has been suspended.  But in
start_iaa_cycle(), the driver checks the flag before checking
the root hub's state.  They should be checked in the opposite
order.

That routine also sets the flag too early, before it has
definitely committed to starting an IAA cycle.

The flag is turned off in end_unlink_async().  Upcoming
changes will call that routine at other times, not just at the
end of an IAA cycle.  The two actions are logically separate
(although related), so we separate out a new routine to be
called in place of end_unlink_async() whenever an IAA cycle
ends: end_iaa_cycle().

iaa_in_progress should be turned off when the root hub is
suspended -- we certainly don't want it still to be set when
the root hub resumes.  Therefore the call to
end_unlink_async() in ehci_bus_suspend() should also be
replaced with a call to end_iaa_cycle().

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-hub.c
drivers/usb/host/ehci-q.c
drivers/usb/host/ehci-timer.c