After 1 or 2 hours of heavy system load running our Point of Sale simulation mode, the screen goes black even though the applications and X aren’t reporting any errors. After generating a debug build of the TI Graphics SDK, I’m getting some useful error messages:
waitForBlitsCompleteOnDeviceMem: PVR2DQueryBlitsComplete failed with error code: -8 (Blit not complete)
waitForBlitsCompleteOnDeviceMem: PVR2DQueryBlitsComplete failed with error code: -8 (Blit not complete)
waitForBlitsCompleteOnDeviceMem: PVR2DQueryBlitsComplete failed with error code: -8 (Blit not complete)
waitForBlitsCompleteOnDeviceMem: PVR2DQueryBlitsComplete failed with error code: -8 (Blit not complete)
waitForBlitsCompleteOnDeviceMem: PVR2DQueryBlitsComplete failed with error code: -8 (Blit not complete)
….
When I attach to Xorg, I can see where the blits and queryblits calls are originating. This presumably means a previous PVR2DBlt request is pending but it seems this never completes in the error case. Unfortunately, I don’t have source to anything lower in the stack than the Exa???() routines so I’m not sure how to further debug this. I suppose I can log the parameters into the PVR2DBlt calls to see if there are any invalid parameters passed.
Breakpoint 1, PVR2DQueryBlitsComplete (hContext=0x1c8610, pMemInfo=0x3821a8,
uiWaitForComplete=1) at pvr2d/devices/sgx/pvr2dblt.c:1838
1838 pvr2d/devices/sgx/pvr2dblt.c: No such file or directory.
in pvr2d/devices/sgx/pvr2dblt.c
(gdb) where
#0 PVR2DQueryBlitsComplete (hContext=0x1c8610, pMemInfo=0x3821a8,
uiWaitForComplete=1) at pvr2d/devices/sgx/pvr2dblt.c:1838
#1 0x404c8538 in waitForBlitsCompleteOnDeviceMem (hPVR2DContext=0x1c8610,
pMemInfo=0x3821a8)
at eurasiacon/freedesktop/X.Org/X11R7.4/pvr_video/devices/sgx/pvr_exa_funcs.c:372
#2 0x404c85c8 in waitForBlitsComplete (privPixmap=0x382828)
at eurasiacon/freedesktop/X.Org/X11R7.4/pvr_video/devices/sgx/pvr_exa_funcs.c:383
#3 0x404caeb0 in sgxPrepareAccess (pPix=0x382798, index=2)
at eurasiacon/freedesktop/X.Org/X11R7.4/pvr_video/devices/sgx/pvr_exa_funcs.c:1605
#4 0x40722c30 in ExaDoPrepareAccess (pPixmap=0x382798, index=2) at exa.c:351
#5 0x40722df4 in exaPrepareAccess (pDrawable=0x382798, index=2) at exa.c:382
#6 0x40723018 in exaValidateGC (pGC=0x4e6d08, changes=8388607,
pDrawable=0x4e2880) at exa.c:543
Breakpoint 2, PVR2DBlt (hContext=0x1c8610, pBltInfo=0x404dd9a4)
at pvr2d/devices/sgx/pvr2dblt.c:1727
1727 in pvr2d/devices/sgx/pvr2dblt.c
(gdb) where
#0 PVR2DBlt (hContext=0x1c8610, pBltInfo=0x404dd9a4)
at pvr2d/devices/sgx/pvr2dblt.c:1727
#1 0x404c8fb4 in sgxSolid (pPixmap=0x4e1ed8, x1=0, y1=0, x2=512, y2=408)
at eurasiacon/freedesktop/X.Org/X11R7.4/pvr_video/devices/sgx/pvr_exa_funcs.c:675
#2 0x40728274 in exaFillRegionSolid (pDrawable=0x4e1ed8, pRegion=0x4e1720,
pixel=0, planemask=4294967295, alu=3, clientClipType=0) at exa_accel.c:1038
#3 0x4072b4a4 in exaPolyFillRect (pDrawable=0x4e1ed8, pGC=0x4e2520, nrect=1,
prect=0x4ba870) at exa_accel.c:817
#4 0x000d3c30 in ?? ()
#0 0x4050b830 in PVR2DBlt () from /usr/lib/libpvr2d.so
#1 0x406282ac in exaHWCopyNtoN (pSrcDrawable=0x4fcc40, pDstDrawable=0x4e80d8,
pGC=0x3825f0, pbox=<value optimized out>, nbox=<value optimized out>,
dx=-4, dy=-40, reverse=0, upsidedown=0) at exa_accel.c:501
#2 0x40628674 in exaCopyNtoN (pSrcDrawable=0x4fcc40, pDstDrawable=0x4e80d8,
pGC=0x3825f0, pbox=0xbeb15ab4, nbox=1, dx=-4, dy=-40, reverse=0,
upsidedown=0, bitplane=0, closure=0x0) at exa_accel.c:584
#3 0x00145498 in miCopyRegion (pSrcDrawable=0x4fcc40, pDstDrawable=0x4e80d8,
pGC=0x3825f0, pDstRegion=<value optimized out>, dx=-4, dy=-40,
copyProc=0x4062854c <exaCopyNtoN>, bitPlane=0, closure=0x0) at micopy.c:137
#4 0x001458bc in miDoCopy (pSrcDrawable=<value optimized out>,
pDstDrawable=0x4e80d8, pGC=0x3825f0, xIn=0, yIn=0, widthSrc=1016,
heightSrc=724, xOut=4, yOut=40, copyProc=0x4062854c <exaCopyNtoN>,
bitPlane=0, closure=0x0) at micopy.c:334
#5 0x406276f0 in exaCopyArea (pSrcDrawable=<value optimized out>,
pDstDrawable=<value optimized out>, pGC=<value optimized out>,
srcx=<value optimized out>, srcy=0, width=1016, height=724, dstx=0, dsty=0)
at exa_accel.c:608
#6 0x000d5ad0 in damageCopyArea (pSrc=0x4fcc40, pDst=0x4e80d8, pGC=0x3825f0,
srcx=0, srcy=0, width=1016, height=724, dstx=0, dsty=0) at damage.c:912
#7 0x404c6b20 in ?? () from /usr/lib/xorg/modules/pvr_drv.so
#8 0x404c6b20 in ?? () from /usr/lib/xorg/modules/pvr_drv.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)