kernel_optimize_test/drivers
Sarah Sharp 8df75f42f8 USB: xhci: Add memory allocation for USB3 bulk streams.
Add support for allocating streams for USB 3.0 bulk endpoints.  See
Documentation/usb/bulk-streams.txt for more information about how and why
you would use streams.

When an endpoint has streams enabled, instead of having one ring where all
transfers are enqueued to the hardware, it has several rings.  The ring
dequeue pointer in the endpoint context is changed to point to a "Stream
Context Array".  This is basically an array of pointers to transfer rings,
one for each stream ID that the driver wants to use.

The Stream Context Array size must be a power of two, and host controllers
can place a limit on the size of the array (4 to 2^16 entries).  These
two facts make calculating the size of the Stream Context Array and the
number of entries actually used by the driver a bit tricky.

Besides the Stream Context Array and rings for all the stream IDs, we need
one more data structure.  The xHCI hardware will not tell us which stream
ID a transfer event was for, but it will give us the slot ID, endpoint
index, and physical address for the TRB that caused the event.  For every
endpoint on a device, add a radix tree to map physical TRB addresses to
virtual segments within a stream ring.

Keep track of whether an endpoint is transitioning to using streams, and
don't enqueue any URBs while that's taking place.  Refuse to transition an
endpoint to streams if there are already URBs enqueued for that endpoint.

We need to make sure that freeing streams does not fail, since a driver's
disconnect() function may attempt to do this, and it cannot fail.
Pre-allocate the command structure used to issue the Configure Endpoint
command, and reserve space on the command ring for each stream endpoint.
This may be a bit overkill, but it is permissible for the driver to
allocate all streams in one call and free them in multiple calls.  (It is
not advised, however, since it is a waste of resources and time.)

Even with the memory and ring room pre-allocated, freeing streams can
still fail because the xHC rejects the configure endpoint command.  It is
valid (by the xHCI 0.96 spec) to return a "Bandwidth Error" or a "Resource
Error" for a configure endpoint command.  We should never see a Bandwidth
Error, since bulk endpoints do not effect the reserved bandwidth.  The
host controller can still return a Resource Error, but it's improbable
since the xHC would be going from a more resource-intensive configuration
(streams) to a less resource-intensive configuration (no streams).

If the xHC returns a Resource Error, the endpoint will be stuck with
streams and will be unusable for drivers.  It's an unavoidable consequence
of broken host controller hardware.

Includes bug fixes from the original patch, contributed by
John Youn <John.Youn@synopsys.com> and Andy Green <AGreen@PLXTech.com>

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-05-20 13:21:38 -07:00
..
accessibility
acpi ACPI: sleep: eliminate duplicate entries in acpisleep_dmi_table[] 2010-05-11 10:07:53 -07:00
amba
ata pata_pcmcia / ide-cs: Fix bad hashes for Transcend and kingston IDs 2010-05-05 14:48:48 -04:00
atm
auxdisplay
base
block Merge branch 'for-jens' of git://git.drbd.org/linux-2.6-drbd into for-linus 2010-05-04 08:48:53 +02:00
bluetooth
cdrom
char tty: Fix unbalanced BKL handling in error path 2010-05-13 12:10:56 -07:00
clocksource
connector
cpufreq Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq 2010-04-24 11:35:21 -07:00
cpuidle cpuidle: Fix incorrect optimization 2010-05-09 18:35:36 -07:00
crypto
dca
dio
dma Merge branch 'sh/for-2.6.34' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2010-05-06 08:37:39 -07:00
edac edac, mce: Fix wrong mask and macro usage 2010-04-30 10:15:39 -07:00
eisa
firewire Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6 2010-04-22 12:54:54 -07:00
firmware
gpio it8761e_gpio: fix bug in gpio numbering 2010-05-11 17:33:41 -07:00
gpu drivers/gpu/drm/i915/i915_irq.c:i915_error_object_create(): use correct kmap-atomic slot 2010-05-11 17:33:42 -07:00
hid USB: remove uses of URB_NO_SETUP_DMA_MAP 2010-05-20 13:21:31 -07:00
hwmon Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging 2010-05-11 17:38:04 -07:00
i2c i2c-core: Use per-adapter userspace device lists 2010-05-04 11:09:28 +02:00
ide pata_pcmcia / ide-cs: Fix bad hashes for Transcend and kingston IDs 2010-05-05 14:48:48 -04:00
idle
ieee1394
ieee802154
infiniband
input USB: remove uses of URB_NO_SETUP_DMA_MAP 2010-05-20 13:21:31 -07:00
isdn
leds
lguest
macintosh
mca
md md: restore ability of spare drives to spin down. 2010-05-07 21:10:57 +10:00
media V4L/DVB: pxa_camera: move fifo reset direct before dma start 2010-05-06 19:20:52 -03:00
memstick
message
mfd mfd: Clean up after WM83xx AUXADC interrupt if it arrives late 2010-05-13 12:58:55 +02:00
misc VMware Balloon driver 2010-04-24 11:31:26 -07:00
mmc mmc: at91_mci: modify cache flush routines 2010-05-15 12:48:10 -07:00
mtd [MTD] Remove zero-length files mtdbdi.c and internal.ho 2010-05-05 15:25:12 -04:00
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2010-05-11 10:11:40 -07:00
nubus
of of: check for IS_ERR() 2010-04-28 01:07:29 -06:00
oprofile
parisc
parport
pci Revert "PCI: update bridge resources to get more big ranges in PCI assign unssigned" 2010-05-12 18:39:45 -07:00
pcmcia Merge branch 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6 2010-05-07 14:11:09 -07:00
platform eeepc-laptop: add missing sparse_keymap_free 2010-04-23 15:23:21 -04:00
pnp Merge branches 'bugzilla-14337', 'bugzilla-14998', 'bugzilla-15407', 'bugzilla-15903' and 'misc-2.6.34' into release 2010-05-06 22:04:31 -04:00
power
pps
ps3
rapidio
regulator regulator: fix enabling regulator issue on max8925 2010-04-28 15:24:34 +01:00
rtc
s390 [S390] dasd: fix race between tasklet and dasd_sleep_on 2010-05-12 09:32:26 +02:00
sbus
scsi [SCSI] Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 I/O error 2010-05-05 12:15:57 -04:00
serial serial: imx.c: fix CTS trigger level lower to avoid lost chars 2010-05-13 12:10:56 -07:00
sfi
sh
sn
spi omap2_mcspi: small fixes of output data format 2010-04-28 01:25:43 -06:00
ssb
staging USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
tc
telephony
thermal
uio
usb USB: xhci: Add memory allocation for USB3 bulk streams. 2010-05-20 13:21:38 -07:00
uwb
vhost vhost: fix barrier pairing 2010-05-12 18:04:04 +03:00
video fbdev: bfin-t350mcqb-fb: fix fbmem allocation with blanking lines 2010-05-11 17:33:42 -07:00
virtio virtio: Fix GFP flags passed from the virtio balloon driver 2010-04-22 07:34:05 -07:00
vlynq
w1 w1: fix omap 1-wire driver compilation 2010-04-24 11:31:25 -07:00
watchdog ARM: 6126/1: ARM mpcore_wdt: fix build failure and other fixes 2010-05-12 11:18:14 +01:00
xen
zorro
Kconfig
Makefile virtio: initialize earlier 2010-05-07 14:01:17 -07:00