Преглед на файлове

usb: ehci should use u16 for isochronous intervals

While most isochronous endpoints have short polling intervals, the
EHCI driver won't necessarily handle larger ones correctly.

This patch switches to use a "u16" to represent those periods, not
a u8, since it can always work:  the largest expressible period
is 2^15 units ... not the previous too-short limit of 128 frames
(full or low speeds) or microframes (high speed, 32 frames).

This bug is essentially theoretical, since the few ISO endpoints
I've seen which don't use one transfer per frame are high speed
ones using more than that (including high bandwidth, 24 KB/msec).

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
David Brownell преди 17 години
родител
ревизия
c06d4dcf50
променени са 1 файла, в които са добавени 1 реда и са изтрити 1 реда
  1. 1 1
      drivers/usb/host/ehci.h

+ 1 - 1
drivers/usb/host/ehci.h

@@ -550,8 +550,8 @@ struct ehci_iso_stream {
 	 * trusting urb->interval == f(epdesc->bInterval) and
 	 * trusting urb->interval == f(epdesc->bInterval) and
 	 * including the extra info for hw_bufp[0..2]
 	 * including the extra info for hw_bufp[0..2]
 	 */
 	 */
-	u8			interval;
 	u8			usecs, c_usecs;
 	u8			usecs, c_usecs;
+	u16			interval;
 	u16			tt_usecs;
 	u16			tt_usecs;
 	u16			maxp;
 	u16			maxp;
 	u16			raw_mask;
 	u16			raw_mask;