Hi

I found a way to reliably reproduce PFIFO CACHE_ERRORS, but I don't see why.

How to reproduce them:
1) Run a couple of glxinfo loops - 3 is usually enough.
   while [ true ]; do nvgl glxinfo >/dev/null 2>/dev/null; done
2) Run glxgears.
3) If you can't see it now, resize glxgears window or add more glxinfos.
Note: you need at least 2 CPUs.

Usually the error looks like this (with a bit improved logging):
nouveau E[   PFIFO][0000:02:00.0] CACHE_ERROR - ch 6 [glxgears[15559]] subc 0 
mthd 0x0060 data 0x8000000f c1p0 0x20000010 HASH_FAILED (unknown bits 
0x20000000) c1_hash 0x00000436

What I found so far:
1) It's triggered by setting of NV11_SUBCHAN_DMA_SEMAPHORE to NvSema
   (0x8000000f) in nv84_fence_emit. Hw tells us it cannot find ramht entry
   for NvSema object (NV04_PFIFO_CACHE1_PULL0 == HASH_FAILED, frequently
   unknown 30th bit is set)
2) In 95% cases CACHE_ERRORs are triggered on glxgears channel.
3) RAMHT entry was definitely created and used many times before reporting
   an error. Next use of NvSema usually does NOT trigger another CACHE_ERROR.
4) NV04_PFIFO_CACHE1_HASH has the same value as was written to ramht.
5) I can replace glxinfo loops with application which creates and destroys
   PGRAPH objects. PCRYPT, PMPEG and SW objects do NOT provoke this bug.
   (program attached)
6) There are no interrupts between CACHE_ERRORs, so it's not caused by race in
   cache_error/software method handling.

Any ideas how to debug it?

Marcin

Attachment: test_objects.tar.gz
Description: Binary data

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to