On Wed, 25 Jul 2007, Mike Nuss wrote: > 2. The logic is too naive. The quirk assumes that if HeadP and DoneP > remain equal (meaning that the HC's queue is empty) for at least one > frame, but the HCD still sees an outstanding TD, then that TD must be > lost. But it may be that even though the queue is still empty, there > were intervening transactions in the meantime (it was momentarily > nonempty, but is now empty again). In that case, I could fix it by > verifying that the second time around, if HeadP and TailP are still > equal, they point to a *different* dummy than they did before. I don't > know how that comparison would be done - a simple address check may not > be sufficient, because the DMA allocation code will give out the same > addresses for new TDs after the old ones are retired.
Surely the correct way to do this is to look for cases where a TD isn't on the donelist but its ED's HeadP has pointed to a later TD for at least one frame. It doesn't matter whether HeadP == TailP or not; what matters is that the queue pointer passed beyond the TD in question sufficiently long ago. Alan Stern ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel