hi Alan: > > BTW, I have another question about iso_stream_schedule. > > When if (likely (!list_empty (&stream->td_list))) happen, > > why don't we just take last scheduled microframe, stream->next_uframe > > as start point directly? > > We do exactly that if URB_ISO_ASAP isn't set. But first the routine > has to check and see if the schedule is already full, and it prints a > debugging message if all the assigned microframes have already expired. Does below source show us what you mean? if (unlikely(start < period)) { ehci_dbg(ehci, "iso sched full %p (%u-%u < %u mod %u)\n", urb, stream->next_uframe, base, period, mod); status = -ENOSPC; goto fail; } if so, I have one question, why we use ( (last scan frame and last schedule frame) < end point interval) to determine schedule is full? Below is where we handle URB_ISO_ASAP, if (urb->transfer_flags & URB_ISO_ASAP) start += (next - start + period - 1) & -period; Why don't we just use start as next? Appreciate your kind help, -- 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