diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2013-10-11 11:28:31 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-11 16:37:46 -0700 |
commit | 8c05dc598e5bc0eb33791de23157cf1e47cb580e (patch) | |
tree | cd5eda6395b47f5ccd8621c77d82f24e017ba4b4 /drivers/usb/host/ehci-sched.c | |
parent | 2b90f01b219e390e1f1bf68dd7a2333efb3e3eff (diff) |
USB: EHCI: No SSPLIT allowed in uframe 7
The scheduling code in ehci-hcd contains an error. For full-speed
isochronous-OUT transfers, the EHCI spec forbids scheduling
Start-Split transactions in H-microframe 7, but the driver allows it
anyway. This patch adds a check to prevent it.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ehci-sched.c')
-rw-r--r-- | drivers/usb/host/ehci-sched.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index 4b0903c6c616..1fc2befc4fdc 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c @@ -1286,6 +1286,10 @@ sitd_slot_ok ( mask = stream->raw_mask << (uframe & 7); + /* for OUT, don't wrap SSPLIT into H-microframe 7 */ + if (((stream->raw_mask & 0xff) << (uframe & 7)) >= (1 << 7)) + return 0; + /* for IN, don't wrap CSPLIT into the next frame */ if (mask & ~0xffff) return 0; |