On Fri, 4 May 2007, Mike Nuss wrote: > Further support (I dumped the 'dummy' td before freeing it). This is a > new trace so the addresses won't match the last trace. > > kernel: ohci_hcd 0000:00:13.0: leak ed c3e8e680 (#82) state 0 (has tds) > kernel: ohci_hcd 0000:00:13.0: ed->dummy td c3e8d8c0; urb 00000000 index > 0; hw next td 03e8d8c0 > ohci_hcd 0000:00:13.0: info 00000000 CC=0 (CARRY) DI=0 SETUP > ohci_hcd 0000:00:13.0: cbp 00000000 be 00000000 (len 0) > ohci_hcd 0000:00:13.0: free ed->dummy: td c3e8d8c0 > > ed->dummy has a non-null next pointer! I don't believe that should ever > be the case.
No, that's normal. Read ohci-mem.c:td_alloc() and you'll see that each newly-allocated TD has its hwNextTD field set to point at itself. In your previous messages you found that the /* INTR_WDH may need to clean up first */ if (td->td_dma != head) goto skip_ed; path was followed. This indicates that a WDH signal isn't being received; the driver isn't getting a notification from the controller that the TD stored at 0x3e3d400 has been completed. In fact, maybe the controller isn't completing that TD at all -- it doesn't appear to be on the done list. But the HeadP pointer gets advanced beyond it. As I understand it, the controller is always supposed to advance the HeadP pointer at the same time as it moves a TD to the done list, and it's supposed to generate an IRQ when the done list's head is changed. Can you get a complete dump of all the ED and TD structures when the error occurs? There's code in ohci-dbg.c to do it for you. Alan Stern ------------------------------------------------------------------------- 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