[Mesa3d-dev] [HD3470/R600] graphics corruption, GPU lockup...

Daniel J Blueman daniel.blueman at gmail.com
Fri Oct 2 07:04:57 PDT 2009


Hi Alex,

On Wed, Sep 30, 2009 at 5:29 PM, Alex Deucher <alexdeucher at gmail.com> wrote:
> On Wed, Sep 30, 2009 at 10:20 AM, Daniel J Blueman
> <daniel.blueman at gmail.com> wrote:
>> When running 2.6.32-rc1 with modesetting on a HD3470/R600 GPU [1] with
>> updated userland [2], I experience a GPU lockup 2-3 seconds after
>> starting glxgears under compiz. We also see intermittent rendering
>> buffer corruption [3] when glxgears is started, and sometimes
>> corruption with text compositing in eg gnome-terminal.
>>
>> When the GPU lockup occurs, we observe Xorg is waiting for the GPU
>> operation to complete [4]; DRM debug reflects this [5]. Xorg.log
>> [attached] isn't telling.
>>
>> The problem isn't reproducible booting with 'nomodeset', so sounds
>> like the radeon KMS init path doesn't correctly/consistently
>> initialise some registers. What tools would be useful to dump the
>> state, perhaps so I can perform a like for like comparison?
>
> There may be some buffer accounting issues with draw prims under kms.
> Does disabling draw prims fix the issue?  To disable the draw prims
> interface, revert this patch:
> http://cgit.freedesktop.org/mesa/mesa/commit/?id=eea30906de37ea3b2f8a594c2b33b643d3dde987

Removing the registration of the drawing primitives via reverting that
patch against mesa-7.7.0~git20090928.d492e7b0, didn't prevent the
crash (or corruption) alas.

For more data, I've seen a related but slightly different Xorg spin
backtrace [1] when firefox was rending (non-flash). Other datapoints
include that I don't experience the GPU hang at all booting with
'nomodeset', however I do still see the visual corruption in the
terminal, clearly unrelated.

What's next?

Thanks,
  Daniel

--- [1]

(gdb) where
#0  0x00007fd37b9a0537 in ioctl () from /lib/libc.so.6
#1  0x00007fd37a5883a3 in drmIoctl (fd=7, request=3221775460,
arg=0x7fff90298110) at ../../libdrm/xf86drm.c:188
#2  0x00007fd37a5885ec in drmCommandWriteRead (fd=7,
drmCommandIndex=<value optimised out>, data=0x7fff90298110,
    size=<value optimised out>) at ../../libdrm/xf86drm.c:2431
#3  0x00007fd379c78069 in bo_wait (bo=0xfd0480) at
../../../libdrm/radeon/radeon_bo_gem.c:206
#4  0x00007fd379c78145 in bo_map (bo=0xfd0480, write=-1073191836) at
../../../libdrm/radeon/radeon_bo_gem.c:181
#5  0x00007fd379f3a636 in _radeon_bo_map (pScrn=<value optimised out>)
at /usr/include/drm/radeon_bo.h:151
#6  r600_vb_get (pScrn=<value optimised out>) at ../../src/r6xx_accel.c:1193
#7  0x00007fd379f3a6a3 in r600_cp_start (pScrn=0x7) at
../../src/r6xx_accel.c:1227
#8  0x00007fd379f39159 in R600PrepareComposite (op=<value optimised
out>, pSrcPicture=<value optimised out>,
    pMaskPicture=<value optimised out>, pDstPicture=<value optimised
out>, pSrc=0x1276200, pMask=0x126f8f0, pDst=0x12bffe0)
    at ../../src/r600_exa.c:1660
#9  0x00007fd37984fd2b in exaTryDriverComposite (op=<value optimised
out>, pSrc=0x1276ca0, pMask=0x12c2d40, pDst=0x126fa70,
    xSrc=<value optimised out>, ySrc=<value optimised out>,
xMask=<value optimised out>, yMask=<value optimised out>,
    xDst=<value optimised out>, yDst=<value optimised out>,
width=<value optimised out>, height=<value optimised out>)
    at ../../exa/exa_render.c:670
#10 0x00007fd379850b1f in exaComposite (op=<value optimised out>,
pSrc=0x1276ca0, pMask=0x12c2d40, pDst=0x126fa70,
    xSrc=<value optimised out>, ySrc=<value optimised out>, xMask=0,
yMask=0, xDst=-8, yDst=4, width=10, height=11)
    at ../../exa/exa_render.c:935
#11 0x00007fd379850c03 in exaTryMagicTwoPassCompositeHelper (op=<value
optimised out>, pSrc=0x1276ca0, pMask=0x12c2d40,
    pDst=0x126fa70, xSrc=<value optimised out>, ySrc=<value optimised
out>, xMask=0, yMask=0, xDst=-8, yDst=4, width=10,
    height=11) at ../../exa/exa_render.c:785
#12 exaComposite (op=<value optimised out>, pSrc=0x1276ca0,
pMask=0x12c2d40, pDst=0x126fa70, xSrc=<value optimised out>,
    ySrc=<value optimised out>, xMask=0, yMask=0, xDst=-8, yDst=4,
width=10, height=11) at ../../exa/exa_render.c:953
#13 0x0000000000537d50 in damageComposite (op=7 '\a', pSrc=<value
optimised out>, pMask=<value optimised out>,
    pDst=0x126fa70, xSrc=-31808, ySrc=-32096, xMask=<value optimised
out>, yMask=<value optimised out>, xDst=-8, yDst=4,
    width=10, height=<value optimised out>) at
../../../miext/damage/damage.c:643
#14 0x00007fd37984d4e5 in exaGlyphs (op=7 '\a', pSrc=<value optimised
out>, pDst=<value optimised out>,
    maskFormat=<value optimised out>, xSrc=<value optimised out>,
ySrc=<value optimised out>, nlist=1, list=0x7fff90299e90,
    glyphs=0x7fff902996a0) at ../../exa/exa_glyphs.c:890
#15 0x0000000000538064 in damageGlyphs (op=7 '\a', pSrc=<value
optimised out>, pDst=0x126fa70,
    maskFormat=<value optimised out>, xSrc=<value optimised out>,
ySrc=<value optimised out>, nlist=1, list=0x7fff90299e90,
    glyphs=0x7fff90299690) at ../../../miext/damage/damage.c:721
#16 0x0000000000531392 in ProcRenderCompositeGlyphs (client=0x1242a10)
at ../../render/render.c:1459
#17 0x000000000044dff4 in Dispatch () at ../../dix/dispatch.c:437
#18 0x0000000000433fa5 in main (argc=<value optimised out>,
argv=0x7fff9029a4b8, envp=<value optimised out>)
    at ../../dix/main.c:397
correctly unredirected).
-- 
Daniel J Blueman


More information about the xorg-driver-ati mailing list