diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2013-10-11 17:28:31 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-12 01:37:46 +0200 |
commit | 8c05dc598e5bc0eb33791de23157cf1e47cb580e (patch) | |
tree | cd5eda6395b47f5ccd8621c77d82f24e017ba4b4 /drivers/usb/host/ehci-sched.c | |
parent | USB: EHCI: compute full-speed bandwidth usage correctly (diff) | |
download | linux-8c05dc598e5bc0eb33791de23157cf1e47cb580e.tar.xz linux-8c05dc598e5bc0eb33791de23157cf1e47cb580e.zip |
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; |