linux/drivers
Thomas Poussevin 317451c11f USB: EHCI: fix HUB TT scheduling issue with iso transfer
commit 811c926c53 upstream.

The current TT scheduling doesn't allow to play and then record on a
full-speed device connected to a high speed hub.

The IN iso stream can only start on the first uframe (0-2 for a 165 us)
because of CSPLIT transactions.
For the OUT iso stream there no such restriction. uframe 0-5 are possible.

The idea of this patch is that the first uframe are precious (for IN TT iso
stream) and we should allocate the last uframes first if possible.

For that we reverse the order of uframe allocation (last uframe first).

Here an example :

hid interrupt stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame | 13  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |
----------------------------------------------------------------------

iso OUT stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame | 13  | 125 |  39 |  0  |  0  |  0  |  0  |  0  |
----------------------------------------------------------------------

There no place for iso IN stream  (uframe 0-2 are used) and we got "cannot
submit datapipe for urb 0, error -28: not enough bandwidth" error.

With the patch this become.

iso OUT stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame |  13 |  0  |  0  |  0  | 125 |  39 |  0  |  0  |
----------------------------------------------------------------------

iso IN stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame |  13 |  0  | 125 | 40  | 125 |  39 |  0  |  0  |
----------------------------------------------------------------------

Signed-off-by: Matthieu Castet <matthieu.castet@parrot.com>
Signed-off-by: Thomas Poussevin <thomas.poussevin@parrot.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-11-26 09:10:03 -08:00
..
accessibility
acpi ACPI atomicio: Convert width in bits to bytes in __acpi_ioremap_fast() 2011-11-11 09:37:11 -08:00
amba ARM: 6829/1: amba: make hardcoded periphid override hardware 2011-05-26 10:33:34 +01:00
ata ata_piix: make DVD Drive recognisable on systems with Intel Sandybridge chipsets(v2) 2011-11-11 09:35:50 -08:00
atm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2011-05-20 13:43:21 -07:00
auxdisplay
base drivers/base/node.c: fix compilation error with older versions of gcc 2011-11-26 09:09:59 -08:00
bcma drivers/bcma/host_pci.c needs slab.h 2011-05-26 17:12:32 -07:00
block xen/blkback: Report VBD_WSECT (wr_sect) properly. 2011-11-11 09:37:07 -08:00
bluetooth btusb: add device entry for Broadcom SoftSailing 2011-11-11 09:36:43 -08:00
cdrom block: fix mismerge of the DISK_EVENT_MEDIA_CHANGE removal 2011-06-02 05:29:19 +09:00
char TPM: Zero buffer after copying to userspace 2011-10-03 11:40:58 -07:00
clk
clocksource Revert "clocksource: sh_cmt: Runtime PM support" 2011-05-31 15:26:42 +09:00
connector Connector: Correctly set the error code in case of success when dispatching receive callbacks 2011-06-07 12:02:00 -07:00
cpufreq drivers/cpufreq/pcc-cpufreq.c: avoid NULL pointer dereference 2011-10-03 11:40:31 -07:00
cpuidle Merge branch 'idle-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6 2011-05-29 11:18:09 -07:00
crypto crypto: caam - fix operator precedence in shared descriptor allocation 2011-06-30 07:43:27 +08:00
dca
dio
dma dmaengine: shdma: SH_DMAC_MAX_CHANNELS message fix 2011-06-14 15:03:07 +09:00
edac i7core_edac: fixed typo in error count calculation 2011-08-29 13:29:06 -07:00
eisa
firewire firewire: sbp2: fix panic after rmmod with slow targets 2011-10-25 07:10:16 +02:00
firmware drivers/firmware/sigma.c needs MODULE_LICENSE 2011-08-04 21:58:38 -07:00
gpio gpio: wm831x: add a missing break in wm831x_gpio_dbg_show 2011-07-15 14:03:30 -06:00
gpu drm/i915/pch: Save/restore PCH_PORT_HOTPLUG across suspend 2011-11-26 09:09:53 -08:00
hid hid/apple: modern macbook airs use the standard apple function key translations 2011-11-11 09:37:22 -08:00
hwmon hwmon: (w83627ehf) Fix broken driver init 2011-11-11 09:37:00 -08:00
hwspinlock hwspinlock/core: use a mutex to protect the radix tree 2011-11-11 09:36:31 -08:00
i2c Merge branch 'for-30-rc5/all-i2c' of git://git.fluff.org/bjdooks/linux 2011-07-07 16:29:29 -07:00
ide ide-disk: Fix request requeuing 2011-10-16 14:14:51 -07:00
idle
ieee802154
infiniband cxgb3i: convert cdev->l2opt to use rcu to prevent NULL dereference 2011-10-03 11:41:08 -07:00
input input: pmic8xxx-pwrkey: Do not use mfd_get_data() 2011-07-05 10:38:43 +02:00
isdn net: Audit drivers to identify those needing IFF_TX_SKB_SHARING cleared 2011-08-15 18:31:38 -07:00
leds Revert "leds: save the delay values after a successful call to blink_set()" 2011-11-21 14:31:19 -08:00
lguest
macintosh Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-05-23 09:12:26 -07:00
mca
md md/raid5: abort any pending parity operations when array fails. 2011-11-21 14:31:22 -08:00
media saa7164: Add support for another HVR2200 hardware revision 2011-11-26 09:09:53 -08:00
memstick
message Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-05-23 09:12:26 -07:00
mfd mfd: Fix twl4030 dependencies for audio codec 2011-11-21 14:31:23 -08:00
misc pcie-gadget-spear: Add "platform:" prefix for platform modalias 2011-11-26 09:09:59 -08:00
mmc mmc: core: ext_csd.raw_* used in comparison but never set 2011-11-11 09:35:23 -08:00
mtd mtd: nand_base: always initialise oob_poi before writing OOB data 2011-11-11 09:37:19 -08:00
net rt2x00: Fix sleep-while-atomic bug in powersaving code. 2011-11-26 09:09:54 -08:00
nfc
nubus
of Merge branch 'devicetree/arm-next' of git://git.secretlab.ca/git/linux-2.6 into devel-stable 2011-05-25 00:08:17 +01:00
oprofile oprofile: Fix locking dependency in sync_start() 2011-05-31 16:33:34 +02:00
parisc
parport Merge branch 'trivial' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2011-05-26 13:19:00 -07:00
pci xen-pcifront: Update warning comment to use 'e820_host' option. 2011-11-11 09:35:46 -08:00
pcmcia pcmcia: pxa2xx/vpac270: free gpios on exist rather than requesting 2011-07-11 14:26:34 +08:00
platform WMI: properly cleanup devices to avoid crashes 2011-11-11 09:36:09 -08:00
pnp
power drivers/power/ds2780_battery.c: fix deadlock upon insertion and removal 2011-11-11 09:36:32 -08:00
pps
ps3
ptp ptp: Fix some locking bugs in ptp_read() 2011-06-01 19:29:10 -07:00
rapidio rapidio: fix use of non-compatible registers 2011-10-03 11:39:46 -07:00
regulator regulator: tps65910: Add missing breaks in switch/case 2011-10-03 11:40:01 -07:00
rtc rtc: Fix RTC PIE frequency limit 2011-10-03 11:40:08 -07:00
s390 ccwgroup: move attributes to attribute group 2011-11-11 09:36:09 -08:00
sbus
scsi aacraid: controller hangs if kernel uses non-default ASPM policy 2011-11-26 09:09:52 -08:00
sfi
sh drivers: sh: resume enabled clocks fix 2011-06-14 15:15:25 +09:00
sn
spi spi/s3c64xx: Bug fix for SPI with different FIFO level 2011-07-06 15:03:08 +09:00
ssb ssb: fix init regression of hostmode PCI core 2011-07-07 13:06:08 -04:00
staging Staging: hv: Add support for >2 TB LUN in storage driver. 2011-11-11 09:35:14 -08:00
target tcm_loop: Add explict read buffer memset for SCF_SCSI_CONTROL_SG_IO_CDB 2011-11-11 09:37:01 -08:00
tc
telephony
thermal
tty TTY: ldisc, wait for ldisc infinitely in hangup 2011-11-26 09:09:58 -08:00
uio
usb USB: EHCI: fix HUB TT scheduling issue with iso transfer 2011-11-26 09:10:03 -08:00
uwb
vhost vhost: support event index 2011-05-30 11:14:15 +09:30
video viafb: improve pitch handling 2011-11-11 09:36:13 -08:00
virtio virtio-pci: fix use after free 2011-11-21 14:31:14 -08:00
vlynq
w1 drivers/power/ds2780_battery.c: add a nolock function to w1 interface 2011-11-11 09:36:32 -08:00
watchdog watchdog: shwdt: fix usage of mod_timer 2011-08-04 21:58:42 -07:00
xen xen-gntalloc: signedness bug in add_grefs() 2011-11-21 14:31:24 -08:00
zorro zorro: Defer device_register() until all devices have been identified 2011-10-03 11:40:57 -07:00
Kconfig ptp: Added a brand new class driver for ptp clocks. 2011-05-23 13:01:00 -07:00
Makefile Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2011-05-28 12:35:15 -07:00