summaryrefslogtreecommitdiffstats
path: root/drivers/usb/storage
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2008-06-13 23:59:54 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2008-07-03 18:20:36 -0700
commit29c8f6a727a683b5988877dd80dbdefd49e64a51 (patch)
treea4be2521cf03591dd220156f4f0a92f3c49f4f89 /drivers/usb/storage
parent056761e55c8687ddf3db14226213f2e8dc2689bc (diff)
downloadblackbird-obmc-linux-29c8f6a727a683b5988877dd80dbdefd49e64a51.tar.gz
blackbird-obmc-linux-29c8f6a727a683b5988877dd80dbdefd49e64a51.zip
USB: ohci - record data toggle after unlink
This patch fixes a problem with OHCI where canceling bulk or interrupt URBs may lose track of the right data toggle. This seems to be a longstanding bug, possibly dating back to the Linux 2.4 kernel, which stayed hidden because (a) about half the time the data toggle bit was correct; (b) canceling such URBs is unusual; and (c) the few drivers which cancel these URBs either [1] do it only as part of shutting down, or [2] have fault recovery logic, which recovers. For those transfer types, the toggle is normally written back into the ED when each TD is retired. But canceling bypasses the mechanism used to retire TDs ... so on average, half the time the toggle bit will be invalid after cancelation. The fix is simple: the toggle state of any canceled TDs are propagated back to the ED in the finish_unlinks function. (Issue found by leonidv11@gmail.com ...) Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Leonid <leonidv11@gmail.com> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/storage')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud