]> git.baikalelectronics.ru Git - kernel.git/commit
USB: EHCI: fix regression in QH unlinking
authorAlan Stern <stern@rowland.harvard.edu>
Wed, 20 Mar 2013 19:07:26 +0000 (15:07 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Mar 2013 23:17:22 +0000 (16:17 -0700)
commitb2eb4f460a534a6ea5f12d2440856d66c23ca51a
treed155eb941ed64817d42be1c2d19ac31a6ab9b75a
parentaf7a117e54e2beca378faaa6dd70345c0a027c53
USB: EHCI: fix regression in QH unlinking

This patch (as1670) fixes a regression caused by commit
3c64fc2ae6a167f6070b3f60c2624d3a7789f618 (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: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: Stephen Warren <swarren@wwwdotorg.org>
Reported-and-tested-by: Sven Joachim <svenjoac@gmx.de>
Reported-by: Andreas Bombe <aeb@debian.org>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/ehci-timer.c