|
@@ -1391,21 +1391,20 @@ iso_stream_schedule (
|
|
|
|
|
|
/* Behind the scheduling threshold? */
|
|
|
if (unlikely(start < next)) {
|
|
|
+ unsigned now2 = (now - base) & (mod - 1);
|
|
|
|
|
|
/* USB_ISO_ASAP: Round up to the first available slot */
|
|
|
if (urb->transfer_flags & URB_ISO_ASAP)
|
|
|
start += (next - start + period - 1) & -period;
|
|
|
|
|
|
/*
|
|
|
- * Not ASAP: Use the next slot in the stream. If
|
|
|
- * the entire URB falls before the threshold, fail.
|
|
|
+ * Not ASAP: Use the next slot in the stream,
|
|
|
+ * no matter what.
|
|
|
*/
|
|
|
- else if (start + span - period < next) {
|
|
|
- ehci_dbg(ehci, "iso urb late %p (%u+%u < %u)\n",
|
|
|
+ else if (start + span - period < now2) {
|
|
|
+ ehci_dbg(ehci, "iso underrun %p (%u+%u < %u)\n",
|
|
|
urb, start + base,
|
|
|
- span - period, next + base);
|
|
|
- status = -EXDEV;
|
|
|
- goto fail;
|
|
|
+ span - period, now2 + base);
|
|
|
}
|
|
|
}
|
|
|
|