linux/drivers
Sarah Sharp 44ebd037c5 USB: xhci: Fix check for room on the ring.
The length of the scatter gather list a driver can enqueue is limited by
the bus' sg_tablesize to 62 entries.  Each entry will be described by at
least one transfer request block (TRB).  If the entry's buffer crosses a
64KB boundary, then that entry will have to be described by two or more
TRBs.  So even if the USB device driver respects sg_tablesize, the whole
scatter list may take more than 62 TRBs to describe, and won't fit on
the ring.

Don't assume that an empty ring means there is enough room on the
transfer ring.  The old code would unconditionally queue this too-large
transfer, and over write the beginning of the transfer.  This would mean
the cycle bit was unchanged in those overwritten transfers, causing the
hardware to think it didn't own the TRBs, and the host would seem to
hang.

Now drivers may see submit_urb() fail with -ENOMEM if the transfers are
too big to fit on the ring.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-05-20 13:21:30 -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 Revert "memory-hotplug: add 0x prefix to HEX block_size_bytes" 2010-04-09 10:05:33 -07:00
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 HID: fix suspend crash by moving initializations earlier 2010-05-07 23:33:52 +02: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 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2010-04-09 11:53:06 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2010-05-13 07:28:43 -07:00
isdn Fix ISDN/Gigaset build failure 2010-04-19 11:53:17 -07:00
leds
lguest lguest: stop using KVM hypercall mechanism 2010-04-14 21:43:56 +09:30
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 MIPS: Fix SSB PCIcore IO resource management 2010-04-12 17:26:14 +01:00
staging Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus 2010-04-30 13:04:14 -07:00
tc
telephony
thermal
uio
usb USB: xhci: Fix check for room on the ring. 2010-05-20 13:21:30 -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