linux/drivers/usb/host
Alan Stern a8693424c7 USB: OHCI: accept very late isochronous URBs
Commit 24f531371d (USB: EHCI: accept very late isochronous URBs)
changed the isochronous API provided by ehci-hcd.  URBs submitted too
late, so that the time slots for all their packets have already
expired, are no longer rejected outright.  Instead the submission is
accepted, and the URB completes normally with a -EXDEV error for each
packet.  This is what client drivers expect.

This patch implements the same policy in ohci-hcd.  The change is more
complicated than it was in ehci-hcd, because ohci-hcd doesn't scan for
isochronous completions in the same way as ehci-hcd does.  Rather, it
depends on the hardware adding completed TDs to a "done queue".  Some
OHCI controller don't handle this properly when a TD's time slot has
already expired, so we have to avoid adding such TDs to the schedule
in the first place.  As a result, if the URB was submitted too late
then none of its TDs will get put on the schedule, so none of them
will end up on the done queue, so the driver will never realize that
the URB should be completed.

To solve this problem, the patch adds one to urb_priv->td_cnt for such
URBs, making it larger than urb_priv->length (td_cnt already gets set
to the number of TD's that had to be skipped because their slots have
expired).  Each time an URB is given back, the finish_urb() routine
looks to see if urb_priv->td_cnt for the next URB on the same endpoint
is marked in this way.  If so, it gives back the next URB right away.

This should be applied to all kernels containing commit 815fa7b917
(USB: OHCI: fix logic for scheduling isochronous URBs).

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-09-25 17:05:35 -07:00
..
whci wusbhc: disable suspend and resume on the root hub. 2013-06-06 12:14:38 -07:00
bcma-hcd.c
ehci-atmel.c ehci-atmel.c: prepare clk before calling enable 2013-06-24 16:21:52 -07:00
ehci-dbg.c ehci: remove duplicate debug_async_open() prototype in ehci-dbg.c 2013-08-30 12:02:08 -07:00
ehci-fsl.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-fsl.h
ehci-grlib.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-hcd.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-hub.c ehci: remove ehci_vdbg() verbose debugging statements 2013-08-30 12:02:07 -07:00
ehci-mem.c USB: EHCI: improve interrupt qh unlink 2013-08-12 11:43:48 -07:00
ehci-msm.c USB: EHCI: make ehci-msm a separate driver 2013-04-08 09:40:20 -07:00
ehci-mv.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-mxc.c usb: ehci-mxc: check for pdata before dereferencing 2013-08-23 10:46:03 -07:00
ehci-octeon.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-omap.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-orion.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-pci.c Intel xhci: refactor EHCI/xHCI port switching 2013-07-23 14:50:29 -07:00
ehci-platform.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-pmcmsp.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-ppc-of.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-ps3.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-q.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-s5p.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ehci-sched.c ehci: enable debugging code when CONFIG_DYNAMIC_DEBUG is set 2013-08-30 12:02:07 -07:00
ehci-sead3.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-sh.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-spear.c usb: host: ehci-spear: Remove redundant checks 2013-05-30 21:32:53 +09:00
ehci-sysfs.c
ehci-tegra.c usb: host: tegra: Tegra30 support 2013-08-12 13:29:54 -05:00
ehci-tilegx.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-timer.c USB: EHCI: improve interrupt qh unlink 2013-08-12 11:43:48 -07:00
ehci-w90x900.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci-xilinx-of.c Revert "USB: EHCI: support running URB giveback in tasklet context" 2013-09-17 09:36:10 -07:00
ehci.h ehci: enable debugging code when CONFIG_DYNAMIC_DEBUG is set 2013-08-30 12:02:07 -07:00
fhci-dbg.c
fhci-hcd.c
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c USB: FHCI: upgrade the isochronous API 2013-05-30 21:34:31 +09:00
fhci-tds.c
fhci.h USB: FHCI: upgrade the isochronous API 2013-05-30 21:34:31 +09:00
fotg210-hcd.c usb: host: Faraday fotg210-hcd driver 2013-07-29 11:15:39 -07:00
fotg210.h usb: host: Faraday fotg210-hcd driver 2013-07-29 11:15:39 -07:00
fsl-mph-dr-of.c usb: host: fsl-mph-dr-of: Staticize local symbols 2013-09-17 11:06:57 -05:00
fusbh200-hcd.c usb: host: fusbh200-hcd: rename two functions 2013-06-03 10:52:40 -07:00
fusbh200.h usb host: Faraday USB2.0 FUSBH200-HCD driver 2013-05-17 10:12:52 -07:00
hwa-hc.c HWA: avoid constant suspend and resume on the root hub 2013-08-12 15:41:09 -07:00
imx21-dbg.c
imx21-hcd.c USB: iMX21: accept very late isochronous URBs 2013-09-25 17:05:34 -07:00
imx21-hcd.h
isp116x-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
isp116x.h USB: isp116x: remove dependency on CONFIG_USB_DEBUG 2013-07-23 16:35:17 -07:00
isp1362-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
isp1362.h USB: isp1362: move debug files from proc to debugfs 2013-07-24 14:43:05 -07:00
isp1760-hcd.c USB: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
isp1760-hcd.h
isp1760-if.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
Kconfig Remove GENERIC_HARDIRQ config option 2013-09-13 15:09:52 +02:00
Makefile xhci: add traces for debug messages in xhci_address_device() 2013-08-13 16:05:38 -07:00
octeon2-common.c
ohci-at91.c usb: ohci-at91: remove unnecessary dev_set_drvdata() 2013-08-27 21:36:46 -07:00
ohci-da8xx.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-dbg.c
ohci-ep93xx.c usb: ohci-ep93xx: tidy up driver (*probe) and (*remove) 2013-07-26 13:54:29 -07:00
ohci-exynos.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-hcd.c USB: OHCI: accept very late isochronous URBs 2013-09-25 17:05:35 -07:00
ohci-hub.c USB: OHCI: prepare to make ohci-hcd a library module 2013-05-30 21:36:03 +09:00
ohci-jz4740.c USB: ohci-jz4740: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:17 -07:00
ohci-mem.c
ohci-nxp.c drivers/usb/host: remove leftover release_mem_region 2013-05-30 21:32:52 +09:00
ohci-octeon.c usb: host: ohci-octeon: Remove redundant platform_set_drvdata() 2013-05-17 10:14:52 -07:00
ohci-omap3.c USB: host: Use usb_hcd_platform_shutdown() wherever possible 2013-07-25 12:01:12 -07:00
ohci-omap.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-pci.c USB patches for 3.12-rc1 2013-09-03 11:35:32 -07:00
ohci-platform.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-ppc-of.c USB: host: Use usb_hcd_platform_shutdown() wherever possible 2013-07-25 12:01:12 -07:00
ohci-ps3.c
ohci-pxa27x.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-q.c USB: OHCI: accept very late isochronous URBs 2013-09-25 17:05:35 -07:00
ohci-s3c2410.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-sa1111.c
ohci-sm501.c USB: ohci-sm501: remove unnecessary platform_set_drvdata() 2013-05-16 17:47:18 -07:00
ohci-spear.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
ohci-tilegx.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
ohci-tmio.c usb: host: ohci-tmio: Remove redundant platform_set_drvdata() 2013-05-17 10:14:53 -07:00
ohci.h USB: OHCI: add a name for the platform-private field 2013-06-03 11:03:18 -07:00
oxu210hp-hcd.c Merge 3.10-rc3 into usb-next 2013-05-27 11:00:52 +09:00
oxu210hp.h
pci-quirks.c Intel xhci: refactor EHCI/xHCI port switching 2013-07-23 14:50:29 -07:00
pci-quirks.h Merge 3.11-rc3 into usb-next 2013-07-29 07:43:16 -07:00
r8a66597-hcd.c usb: r8a66597-hcd: use platform_{get,set}_drvdata() 2013-08-30 11:11:35 -07:00
r8a66597.h
sl811_cs.c drivers/usb: use module_pcmcia_driver() in pcmcia drivers 2013-03-15 12:26:38 -07:00
sl811-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
sl811.h USB: sl811: move debug files from proc to debugfs 2013-07-24 14:43:05 -07:00
ssb-hcd.c
u132-hcd.c USB: host: use dev_get_platdata() 2013-07-31 17:53:50 -07:00
uhci-debug.c
uhci-grlib.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
uhci-hcd.c
uhci-hcd.h
uhci-hub.c USB: UHCI: fix for suspend of virtual HP controller 2013-05-15 13:41:40 -04:00
uhci-pci.c
uhci-platform.c USB: host: use platform_{get,set}_drvdata() 2013-05-30 21:32:54 +09:00
uhci-q.c USB: UHCI: accept very late isochronous URBs 2013-09-25 17:05:34 -07:00
xhci-dbg.c xhci: add traces for debug messages in xhci_address_device() 2013-08-13 16:05:38 -07:00
xhci-ext-caps.h xhci: fix port BESL LPM capability checking 2013-08-27 08:54:42 -07:00
xhci-hub.c usb: Fix xHCI host issues on remote wakeup. 2013-09-23 15:43:31 -07:00
xhci-mem.c usb: Fix xHCI host issues on remote wakeup. 2013-09-23 15:43:31 -07:00
xhci-pci.c xhci: add trace for debug messages related to quirks 2013-08-13 16:05:41 -07:00
xhci-plat.c xhci: Step 1 to fix usb-linus and usb-next. 2013-08-15 18:00:46 -07:00
xhci-ring.c xhci: Fix race between ep halt and URB cancellation 2013-09-23 15:43:31 -07:00
xhci-trace.c xhci: add traces for debug messages in xhci_address_device() 2013-08-13 16:05:38 -07:00
xhci-trace.h xhci: trace debug statements related to ring expansion 2013-08-13 21:14:44 -07:00
xhci.c xhci: Ensure a command structure points to the correct trb on the command ring 2013-09-23 15:43:30 -07:00
xhci.h usb: Fix xHCI host issues on remote wakeup. 2013-09-23 15:43:31 -07:00