On Friday 08 February 2008, Alan Stern wrote: > > > There's currently an issue with isoc transfers made by em28xx driver[1] and > > ehcd_hci. If I try to start isoc transfers on more than one hardware, the > > second hardware fails at usb_submit_urb() with -ENOSPC. > > ENOSPC means that you are attempting to use more bandwidth than the bus > allows. A high-speed isochronous transfer of length 3072 requires 41% > of the total bandwidth (according to Table 5-5 in the USB 2.0 spec), > and periodic transfers (isochronous and interrupt) on a high-speed bus > are limited to no more than 80% of the total bandwidth. > > Performing transfers to two devices would require 82% of the bandwidth; > hence it isn't allowed.
Well, the USB 2.0 spec is internally inconsistent on that point. And when I've asked the USB-IF for resolution on that, or maybe issuance of an erratum, they've been silent. (Greg, maybe you can do something about that now? The issue's been reported for quite a few years now.) See table 5.5, at the bottom (section 5.6). Somehow it thinks that twice 41% is below the 80% limit (listed in section 5.6.4, paragraph 2). Similarly, table 5.8, at the bottom (section 5.7) which again repeats the 80% limit (para 1 of section 5.7.4). The 80% limit is referenced section 5.10 too. Somebody at USB-IF was refusing to do some basic math, or has been ignoring this obvious spec bug. Either both those tables are wrong, or the three references to an 80% limit are wrong. There are no other resolutions to this bug. I'd be tempted to accept a patch teaching EHCI that the limit is really 82%, or whatever ... but I also think it's overdue for the USB-IF to correct their spec. - To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
