• Alan Stern's avatar
    USB: EHCI: improve end_unlink_async() · 214ac7a0
    Alan Stern authored
    This patch (as1665) changes the way ehci-hcd's end_unlink_async()
    routine works in order to avoid recursive execution and to be more
    efficient:
    
    	Now when an IAA cycle ends, a new one gets started up right
    	away (if it is needed) instead of waiting until the
    	just-unlinked QH has been processed.
    
    	The async_iaa list is renamed to async_idle, which better
    	expresses its new purpose: It is now the list of QHs which are
    	now completely idle and are waiting to be processed by
    	end_unlink_async().
    
    	A new flag is added to track whether an IAA cycle is in
    	progress, because the list formerly known as async_iaa no
    	longer stores the QHs waiting for the IAA to finish.
    
    	The decision about how many QHs to process when an IAA cycle
    	ends is now made at the end of the cycle, when we know the
    	current state of the hardware, rather than at the beginning.
    	This means a bunch of logic got moved from start_iaa_cycle()
    	to end_unlink_async().
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    214ac7a0
ehci-hcd.c 38.8 KB