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/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel