USB: ehci-sched.c: EHCI SITD scheduling bugfix
authorDan Streetman <ddstreet@ieee.org>
Tue, 21 Apr 2009 17:37:12 +0000 (13:37 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 23 Apr 2009 21:15:28 +0000 (14:15 -0700)
commitc065c60e83c006611caed23d1320450fcd709398
tree59640660e40d4f5da151fb209888c7dc435cef09
parent37768adf9a1d49aeac0db1ba3dc28b3274b7b789
USB: ehci-sched.c: EHCI SITD scheduling bugfix

Without this patch, the driver won't check that the last fully-occupied
uframe for a new split transaction was vacant beforehand.  This can
lead to a situation in which the first 188 bytes of a 192-byte
isochronous transfer are scheduled in the same uframe as an existing
interrupt transfer.  The resulting schedule looks like this:

       uframe 0: 188-byte isoc-OUT SSPLIT, 8-byte int-IN SSPLIT
       uframe 1: 4-byte isoc-OUT SSPLIT

The SSPLITs are intermingled, causing an error in the downstream hub's
TT.

If you are having problems with devices or hub ports resetting, or failed
interrupt transfers, when you start using a USB audio or video (Isochronous)
device, this patch may help.

Signed-off-by: Dan Streetman <ddstreet@ieee.org>
Reported-by: Kung James <kong1191@gmail.com>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Alan Stern <stern@rowland.harvard.edu>
drivers/usb/host/ehci-sched.c