• Alan Stern's avatar
    USB: EHCI: fix regression in QH unlinking · d714aaf6
    Alan Stern authored
    This patch (as1670) fixes a regression caused by commit
    6402c796 (USB: EHCI: work around
    silicon bug in Intel's EHCI controllers).  The workaround goes through
    two IAA cycles for each QH being unlinked.  During the first cycle,
    the QH is not added to the async_iaa list (because it isn't fully gone
    from the hardware yet), which means that list will be empty.
    
    Unfortunately, I forgot to update the IAA watchdog timer routine.  It
    thinks that an empty async_iaa list means the timer expiration was an
    error, which isn't true any more.  This problem didn't show up during
    initial testing because the controllers being tested all had working
    IAA interrupts.  But not all controllers do, and when the watchdog
    timer expires, the empty-list check prevents the second IAA cycle from
    starting.  As a result, URB unlinks never complete.  The check needs
    to be removed.
    
    Among the symptoms of the regression are processes stuck in D wait
    states and hangs during system shutdown.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Reported-and-tested-by: default avatarStephen Warren <swarren@wwwdotorg.org>
    Reported-and-tested-by: default avatarSven Joachim <svenjoac@gmx.de>
    Reported-by: default avatarAndreas Bombe <aeb@debian.org>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d714aaf6
ehci-timer.c 12.2 KB