On Monday 30 April 2007, Mike Nuss wrote: > Alan Stern wrote: > > > I think it's pretty clear there's an underlying hardware issue, but > > > maybe there is a workaround. I added the additional debug code you > > > suggested to get a better idea of what finish_unlinks() is doing (or > not > > > doing). > > > > And the results are... ? > > finish_unlinks is getting called in the 'sanitize' path of > ohci_endpoint_disable(). The test "if (td->td-dma != head)" passes, and > it jumps to the skip_ed path.
So, trying for some (bad) ASCII art here TDs 1-4 submitted to ED, HC completed a few (say, 1 & 2) ed.tail ---------------------------+ ed.head ----------+ I I I v v td1 --> td2 --> td3 --> td4 --> dummy Where "td" is like td1, and clearly is not the first TD in the queue. One problem being that by now td1 and td2 should have shown up in the donelist, through an IRQ. That would explain the symprom of data transfers seeming to stop. It'd be interesting to see whether there's anything in that donelist; if so, that might suggest that the driver somehow lost an IRQ. Try printing its value in that "sanitize" path. If the value is nonzero, then try disabling that very first test in ohci_irq ... just add a "&& 0" clause to keep it simple. I know that some older OHCI implementations have bugs in that area. - Dave ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel