On Sat, 27 Jul 2013, James Stone wrote: > OK. So this seems to have solved the starting jack at low latencies > problem, but I am still getting sporadic cannot submit urb (err = -18) > under normal use. Will try to add some more info to the #1191603 > report if I can get it to happen while logging IRQ. Do these errors occur at the start of a session or somewhere in the middle? If they occur in the middle, they indicate possible underruns. The patch below will greatly reduce the number of these errors (probably to the point where you don't see any at all), although it won't fix possible underruns. Alan Stern Index: usb-3.10/drivers/usb/host/ehci-sched.c =================================================================== --- usb-3.10.orig/drivers/usb/host/ehci-sched.c +++ usb-3.10/drivers/usb/host/ehci-sched.c @@ -1388,7 +1388,7 @@ iso_stream_schedule ( struct ehci_iso_stream *stream ) { - u32 now, base, next, start, period, span; + u32 now, now2, base, next, start, period, span; int status; unsigned mod = ehci->periodic_size << 3; struct ehci_iso_sched *sched = urb->hcpriv; @@ -1422,6 +1422,7 @@ iso_stream_schedule ( base = ehci->last_iso_frame << 3; next = (next - base) & (mod - 1); start = (stream->next_uframe - base) & (mod - 1); + now2 = (now - base) & (mod - 1); /* Is the schedule already full? */ if (unlikely(start < period)) { @@ -1441,12 +1442,12 @@ iso_stream_schedule ( /* * Not ASAP: Use the next slot in the stream. If - * the entire URB falls before the threshold, fail. + * the entire URB falls before the current frame, fail. */ - else if (start + span - period < next) { + else if (start + span - period < now2) { ehci_dbg(ehci, "iso urb late %p (%u+%u < %u)\n", urb, start + base, - span - period, next + base); + span - period, now2 + base); status = -EXDEV; goto fail; } -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html