On Sun, 3 Jan 2010, Sean wrote:

> Alan,
> 
> I applied the patches and ran capture-example twice. On the second run 
> of capture-example a circular pointer popped up. I did not need to 
> remove the camera. Attached are the serial console capture as well as 
> the dmesg log in debug4.tar.gz. Did you want me to try to reproduce the 
> poison message?

No.  Among the things that patch did was to fix up the errors that 
caused the invalid pointers.  Hence there should not have been any 
"poisoned hash" messages -- and indeed there weren't.

The interesting part of the log is the error messages:

ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 1 c6774040 c6542040 c6774040
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 1 c6774040 c6542040 c6774040
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 1 c6774040 c6542040 c6774040
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800
ohci_hcd 0000:00:0b.0: Circular pointer #2b: 32 c6774800 c6542800 c6774800

There are two different hash chains here (32 and 1), but in each case
see the message is #2b, never #2a.  This means the problem occurs
between the places where the #2a and #2b messages were inserted, i.e.,
in td_fill().  The hash chain contained a single TD and was fine to
begin with; then another TD was added at the start of the chain and the
pointer in the earlier TD (now at the second position in the chain) got
messed up.

For example, the error message in the first line above implies that
originally the 32nd hash chain contained only the TD at c6542800 with
its td_hash member set to NULL.  But then c6774800 was added to the
start of the chain, after which c6542800's td_hash pointed to c6774800.

Try inserting a line saying:

        td_check(ohci, hash, "#2c");

two lines above the #2b line, i.e., just after the wmb().  That'll help 
narrow down the search for the bug.

And by the way, you don't need to post your entire dmesg log.  Just the 
portion containing the new debugging messages will be enough.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to