linux/drivers/usb/host
David Brownell 29c8f6a727 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>
2008-07-03 18:20:36 -07:00
..
ehci-au1xxx.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-dbg.c drivers/usb annotations and fixes 2008-04-28 10:03:31 -07:00
ehci-fsl.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-fsl.h ehci-fsl: fix cache coherency problem on system with large memory 2007-05-23 20:14:15 -07:00
ehci-hcd.c Revert "USB: EHCI: fix performance regression" 2008-05-29 19:43:27 -07:00
ehci-hub.c USB: EHCI: fix remote-wakeup regression 2008-05-29 13:59:04 -07:00
ehci-ixp4xx.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-mem.c Revert "USB: EHCI cpufreq fix" 2007-08-20 23:38:44 -07:00
ehci-orion.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-pci.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ppc-of.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ppc-soc.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ps3.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-q.c Revert "USB: EHCI: fix performance regression" 2008-05-29 19:43:27 -07:00
ehci-sched.c USB: EHCI: fix bug in Iso scheduling 2008-05-29 13:59:04 -07:00
ehci.h USB: ehci - fix timer regression 2008-07-03 18:20:36 -07:00
isp116x-hcd.c USB: HCDs use the do_remote_wakeup flag 2008-04-24 21:16:53 -07:00
isp116x.h USB: isp116x: fix enumeration on boot 2008-03-04 14:57:43 -08:00
isp1760-hcd.c USB: isp1760: Assign resource fields before adding hcd 2008-06-11 17:06:33 -07:00
isp1760-hcd.h USB: ISP1760 HCD driver 2008-05-02 10:25:50 -07:00
isp1760-if.c isp1760-if iomem annotations 2008-06-04 08:06:01 -07:00
Kconfig usb: r8a66597-hcd: Add support for SH7723 USB host 2008-06-09 16:04:12 +09:00
Makefile USB: ISP1760 HCD driver 2008-05-02 10:25:50 -07:00
ohci-at91.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-au1xxx.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-dbg.c USB: remove dev->power.power_state 2008-04-24 21:16:41 -07:00
ohci-ep93xx.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-hcd.c OHCI: Fix problem if SM501 and another platform driver is selected 2008-07-03 18:20:35 -07:00
ohci-hub.c USB: OHCI: work around bogus compiler warning 2008-05-02 10:25:57 -07:00
ohci-lh7a404.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-mem.c USB: OHCI handles more ZFMicro quirks 2007-10-12 14:54:59 -07:00
ohci-omap.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-pci.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-pnx4008.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-pnx8550.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-ppc-of.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-ppc-soc.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-ps3.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-pxa27x.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-q.c USB: ohci - record data toggle after unlink 2008-07-03 18:20:36 -07:00
ohci-s3c2410.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-sa1111.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-sh.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci-sm501.c usb: fix integer as NULL pointer warnings found by sparse 2008-05-14 10:00:26 -07:00
ohci-ssb.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
ohci.h USB: convert ohci debug files to use debugfs instead of sysfs 2008-02-01 14:34:52 -08:00
pci-quirks.c USB: replace remaining __FUNCTION__ occurrences 2008-04-24 21:16:55 -07:00
pci-quirks.h
r8a66597-hcd.c drivers/usb annotations and fixes 2008-04-28 10:03:31 -07:00
r8a66597.h USB: r8a66597-hcd: Add support for SH7366 USB host 2008-04-24 21:16:49 -07:00
sl811_cs.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
sl811-hcd.c usb: use non-racy method for proc entries creation 2008-04-29 08:06:21 -07:00
sl811.h
u132-hcd.c USB: don't explicitly reenable root-hub status interrupts 2008-04-24 21:16:53 -07:00
uhci-debug.c USB: add urb->unlinked field 2007-10-12 14:55:19 -07:00
uhci-hcd.c USB: UHCI: disable remote wakeup when it's not needed 2008-05-02 10:25:57 -07:00
uhci-hcd.h USB: UHCI: disable remote wakeup when it's not needed 2008-05-02 10:25:57 -07:00
uhci-hub.c UHCI: fix port resume problem 2007-03-09 19:52:23 -08:00
uhci-q.c USB: replace remaining __FUNCTION__ occurrences 2008-04-24 21:16:55 -07:00