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

Reply via email to