• Alan Stern's avatar
    USB: EHCI: improve handling of the ehci->iaa_in_progress flag · f96fba0d
    Alan Stern authored
    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: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f96fba0d
ehci-hub.c 36.1 KB