Commit c065c60e authored by Dan Streetman's avatar Dan Streetman Committed by Greg Kroah-Hartman

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: default avatarDan Streetman <ddstreet@ieee.org>
Reported-by: default avatarKung James <kong1191@gmail.com>
Acked-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Cc: Alan Stern <stern@rowland.harvard.edu>
parent 37768adf
...@@ -323,7 +323,7 @@ static int tt_available ( ...@@ -323,7 +323,7 @@ static int tt_available (
* already scheduled transactions * already scheduled transactions
*/ */
if (125 < usecs) { if (125 < usecs) {
int ufs = (usecs / 125) - 1; int ufs = (usecs / 125);
int i; int i;
for (i = uframe; i < (uframe + ufs) && i < 8; i++) for (i = uframe; i < (uframe + ufs) && i < 8; i++)
if (0 < tt_usecs[i]) { if (0 < tt_usecs[i]) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment