]> git.baikalelectronics.ru Git - kernel.git/commit
USB: EHCI: fix two new bugs related to Clear-TT-Buffer
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 31 Jul 2009 14:40:22 +0000 (10:40 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 7 Aug 2009 23:05:13 +0000 (16:05 -0700)
commit81e2a4f13d6763205e446624f2bbe802ffdc49e0
tree268d5316e3c3d3bd0957d39d4233036790736965
parent946bb8c0d5aa37ce54e2a049278a2797fecff3fc
USB: EHCI: fix two new bugs related to Clear-TT-Buffer

This patch (as1273) fixes two(!) bugs introduced by the new
Clear-TT-Buffer implementation in ehci-hcd.

It is now possible for an idle QH to have some URBs on its
queue -- this will happen if a Clear-TT-Buffer is pending for
the QH's endpoint.  Consequently we should not issue a warning
when someone tries to unlink an URB from an idle QH; instead
we should process the request immediately.

The refcounts for QHs could get messed up, because
submit_async() would increment the refcount when calling
qh_link_async() and qh_link_async() would then refuse to link
the QH into the schedule if a Clear-TT-Buffer was pending.
Instead we should increment the refcount only when the QH
actually is added to the schedule.  The current code tries to
be clever by leaving the refcount alone if an unlink is
immediately followed by a relink; the patch changes this to an
unconditional decrement and increment (although they occur in
the opposite order).

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: David Brownell <david-b@pacbell.net>
Tested-by: Manuel Lauss <manuel.lauss@gmail.com>
Tested-by: Matthijs Kooijman <matthijs@stdin.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-q.c