[HD3470/R600] graphics corruption, GPU lockup...

Daniel J Blueman daniel.blueman at gmail.com
Wed Sep 30 07:20:56 PDT 2009


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?

I'll can open a fd.o bug report when https://bugs.freedesktop.org is
back up, if it helps.

Thanks,
  Daniel

--- [1]

http://www.smolts.org/client/show/pub_4bdab42d-5c1c-4968-ac4d-6fb3bb3092bc

--- [2]

libdrm-radeon1 2.4.14-0ubuntu0tormod
xserver-xorg-core 2:1.6.3+git20090805+server-1.6-branch.f274e595-0ubuntu0sarvatt
xserver-xorg-video-ati 1:6.12.99+git20090926.7968e1fb-0ubuntu0tormod

--- [3]

http://quora.org/hive/glxgears-corruption.png

--- [4]

(gdb) where
#0  0x00007f2df2ff0537 in ioctl () from /lib/libc.so.6
#1  0x00007f2df1bd83a3 in drmIoctl (fd=7, request=3221775460,
arg=0x7fffcb9841f0) at ../../libdrm/xf86drm.c:188
#2  0x00007f2df1bd85ec in drmCommandWriteRead (fd=7,
drmCommandIndex=<value optimised out>, data=0x7fffcb9841f0,
    size=<value optimised out>) at ../../libdrm/xf86drm.c:2431
#3  0x00007f2df12c8069 in bo_wait (bo=0x1128480) at
../../../libdrm/radeon/radeon_bo_gem.c:206
#4  0x00007f2df12c8145 in bo_map (bo=0x1128480, write=-1073191836) at
../../../libdrm/radeon/radeon_bo_gem.c:181
#5  0x00007f2df158a636 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  0x00007f2df158a6a3 in r600_cp_start (pScrn=0x7) at
../../src/r6xx_accel.c:1227
#8  0x00007f2df1584d2b in R600DoPrepareCopy (pScrn=0xf552f0,
src_pitch=-1073191836, src_width=<value optimised out>,
    src_height=<value optimised out>, src_offset=<value optimised
out>, src_bo=0x13dee10, src_bpp=32, dst_pitch=320,
    dst_width=300, dst_height=300, dst_offset=0, dst_bo=0x13ea6e0,
dst_bpp=32, rop=3, planemask=4294967295)
    at ../../src/r600_exa.c:459
#9  0x00007f2df1587cc3 in R600PrepareCopy (pSrc=0x13dec20, pDst=<value
optimised out>, xdir=<value optimised out>,
    ydir=<value optimised out>, rop=<value optimised out>,
planemask=<value optimised out>) at ../../src/r600_exa.c:838
#10 0x00007f2df0e9b06e in exaCopyNtoN (pSrcDrawable=<value optimised
out>, pDstDrawable=0x13de120,
    pGC=<value optimised out>, pbox=0x7fffcb984800, nbox=1, dx=-1,
dy=-49, reverse=0, upsidedown=0, bitplane=0, closure=0x0)
    at ../../exa/exa_accel.c:503
#11 0x00007f2df10b837d in fbCopyRegion (pSrcDrawable=0x13dec20,
pDstDrawable=0xc0086464, pGC=0x7fffcb9841f0,
    pDstRegion=<value optimised out>, dx=-1, dy=<value optimised out>,
copyProc=0x7f2df0e9a810 <exaCopyNtoN>, bitPlane=0,
    closure=0x140) at ../../fb/fbcopy.c:396
#12 0x00007f2df10b888a in fbDoCopy (pSrcDrawable=0x13dec20,
pDstDrawable=0x13de120, pGC=0xf9e610, xIn=0, yIn=0,
    widthSrc=<value optimised out>, heightSrc=300, xOut=0, yOut=0,
copyProc=0x7f2df0e9a810 <exaCopyNtoN>, bitPlane=0,
    closure=0x0) at ../../fb/fbcopy.c:596
#13 0x00007f2df0e9a793 in exaCopyArea (pSrcDrawable=0x13dec20,
pDstDrawable=0x13de120, pGC=0xf9e610, srcx=0,
    srcy=<value optimised out>, width=<value optimised out>,
height=300, dstx=0, dsty=0) at ../../exa/exa_accel.c:558
#14 0x0000000000539fc8 in damageCopyArea (pSrc=0x13dec20,
pDst=0x13de120, pGC=0xf9e610, srcx=<value optimised out>,
    srcy=<value optimised out>, width=300, height=300, dstx=0, dsty=0)
at ../../../miext/damage/damage.c:949
#15 0x00007f2df15a1db2 in radeon_dri2_copy_region (drawable=<value
optimised out>, region=0x13f74f0,
    dest_buffer=<value optimised out>, src_buffer=<value optimised
out>) at ../../src/radeon_dri2.c:310
#16 0x00007f2df19d2303 in DRI2CopyRegion (pDraw=0x13de120,
pRegion=0x13f74f0, dest=0, src=1)
    at ../../../../hw/xfree86/dri2/dri2.c:420
#17 0x00007f2df19d31d5 in ProcDRI2CopyRegion (client=0x13c8250) at
../../../../hw/xfree86/dri2/dri2ext.c:305
#18 ProcDRI2Dispatch (client=0x13c8250) at
../../../../hw/xfree86/dri2/dri2ext.c:350
#19 0x000000000044dff4 in Dispatch () at ../../dix/dispatch.c:437
#20 0x0000000000433fa5 in main (argc=<value optimised out>,
argv=0x7fffcb984c68, envp=<value optimised out>)
    at ../../dix/main.c:397

(gdb) bt full
#0  0x00007f2df2ff0537 in ioctl () from /lib/libc.so.6
No symbol table info available.
#1  0x00007f2df1bd83a3 in drmIoctl (fd=7, request=3221775460,
arg=0x7fffcb9841f0) at ../../libdrm/xf86drm.c:188
        ret = 32
#2  0x00007f2df1bd85ec in drmCommandWriteRead (fd=7,
drmCommandIndex=<value optimised out>, data=0x7fffcb9841f0,
    size=<value optimised out>) at ../../libdrm/xf86drm.c:2431
No locals.
#3  0x00007f2df12c8069 in bo_wait (bo=0x1128480) at
../../../libdrm/radeon/radeon_bo_gem.c:206
        args = {handle = 6, pad = 0}
        ret = -16
#4  0x00007f2df12c8145 in bo_map (bo=0x1128480, write=-1073191836) at
../../../libdrm/radeon/radeon_bo_gem.c:181
        args = {handle = 0, pad = 0, offset = 16090848, size =
16077552, addr_ptr = 139835299404278}
        r = 0
        ptr = 0xfffffffffffffff0
#5  0x00007f2df158a636 in _radeon_bo_map (pScrn=<value optimised out>)
at /usr/include/drm/radeon_bo.h:151
No locals.
#6  r600_vb_get (pScrn=<value optimised out>) at ../../src/r6xx_accel.c:1193
        info = <value optimised out>
        accel_state = 0xf5f510
        ret = <value optimised out>
#7  0x00007f2df158a6a3 in r600_cp_start (pScrn=0x7) at
../../src/r6xx_accel.c:1227
        info = 0xf586e0
        accel_state = 0xf5f510
#8  0x00007f2df1584d2b in R600DoPrepareCopy (pScrn=0xf552f0,
src_pitch=-1073191836, src_width=<value optimised out>,
    src_height=<value optimised out>, src_offset=<value optimised
out>, src_bo=0x13dee10, src_bpp=32, dst_pitch=320,
    dst_width=300, dst_height=300, dst_offset=0, dst_bo=0x13ea6e0,
dst_bpp=32, rop=3, planemask=4294967295)
    at ../../src/r600_exa.c:459
        info = 0xf586e0
        accel_state = 0xf5f510
        pmask = <value optimised out>
        cb_conf = {id = 0, w = 0, h = 0, base = 0, format = 0, endian
= 0, array_mode = 0, number_type = 0, read_size = 0,
          comp_swap = 0, tile_mode = 0, blend_clamp = 0, clear_color =
0, blend_bypass = 0, blend_float32 = 0,
          simple_float = 0, round_mode = 0, tile_compact = 0,
source_format = 0, bo = 0x0}
        tex_res = {id = 0, w = 0, h = 0, pitch = 0, depth = 0, dim =
0, tile_mode = 0, tile_type = 0, format = 0, base = 0,
          mip_base = 0, format_comp_x = 0, format_comp_y = 0,
format_comp_z = 0, format_comp_w = 0, num_format_all = 0,
          srf_mode_all = 0, force_degamma = 0, endian = 0,
request_size = 0, dst_sel_x = 0, dst_sel_y = 0, dst_sel_z = 0,
          dst_sel_w = 0, base_level = 0, last_level = 0, base_array =
0, last_array = 0, mpeg_clamp = 0,
          perf_modulation = 0, interlaced = 0, bo = 0x0, mip_bo = 0x0}
        tex_samp = {id = 0, clamp_x = 0, clamp_y = 0, clamp_z = 0,
border_color = 0, xy_mag_filter = 0, xy_min_filter = 0,
          z_filter = 0, mip_filter = 0, high_precision_filter = 0,
perf_mip = 0, perf_z = 0, min_lod = 0, max_lod = 0,
          lod_bias = 0, lod_bias2 = 0, lod_uses_minor_axis = 0,
point_sampling_clamp = 0, tex_array_override = 0,
          mc_coord_truncate = 0, force_degamma = 0, fetch_4 = 0,
sample_is_pcf = 0, type = 0, depth_compare = 0,
          chroma_key = 0}
        vs_conf = {shader_addr = 0, num_gprs = 0, stack_size = 0,
dx10_clamp = 0, prime_cache_pgm_en = 0,
          prime_cache_on_draw = 0, fetch_cache_lines = 0,
prime_cache_en = 0, prime_cache_on_const = 0, clamp_consts = 0,
          export_mode = 0, uncached_first_inst = 0, bo = 0x0}
        ps_conf = {shader_addr = 0, num_gprs = 0, stack_size = 0,
dx10_clamp = 0, prime_cache_pgm_en = 0,
          prime_cache_on_draw = 0, fetch_cache_lines = 0,
prime_cache_en = 0, prime_cache_on_const = 0, clamp_consts = 0,
          export_mode = 0, uncached_first_inst = 0, bo = 0x0}
        __func__ = "R600DoPrepareCopy"
#9  0x00007f2df1587cc3 in R600PrepareCopy (pSrc=0x13dec20, pDst=<value
optimised out>, xdir=<value optimised out>,
    ydir=<value optimised out>, rop=<value optimised out>,
planemask=<value optimised out>) at ../../src/r600_exa.c:838
        pScrn = 0xf552f0
        info = 0xf586e0
        accel_state = 0xf5f510
        ret = <value optimised out>
#10 0x00007f2df0e9b06e in exaCopyNtoN (pSrcDrawable=<value optimised
out>, pDstDrawable=0x13de120,
    pGC=<value optimised out>, pbox=0x7fffcb984800, nbox=1, dx=-1,
dy=-49, reverse=0, upsidedown=0, bitplane=0, closure=0x0)
    at ../../exa/exa_accel.c:503
        pSrcPixmap = 0x13dec20
        pDstPixmap = 0x13dffb0
        src_off_x = <value optimised out>
        src_off_y = <value optimised out>
        dst_off_x = -1
        dst_off_y = -49
        pixmaps = {{as_dst = 1, as_src = 0, pPix = 0x13dffb0, pReg =
0x0}, {as_dst = 0, as_src = 1, pPix = 0x13dec20,
            pReg = 0x13f7a60}}
        srcregion = 0x13f7a60
        dstregion = 0x0
#11 0x00007f2df10b837d in fbCopyRegion (pSrcDrawable=0x13dec20,
pDstDrawable=0xc0086464, pGC=0x7fffcb9841f0,
    pDstRegion=<value optimised out>, dx=-1, dy=<value optimised out>,
copyProc=0x7f2df0e9a810 <exaCopyNtoN>, bitPlane=0,
    closure=0x140) at ../../fb/fbcopy.c:396
        reverse = 300
        upsidedown = 5464056
        pbox = 0x7fffcb984800
        nbox = 1
        pboxNew1 = <value optimised out>
        pboxNew2 = <value optimised out>
        pboxBase = <value optimised out>
        pboxNext = <value optimised out>
        pboxTmp = <value optimised out>
#12 0x00007f2df10b888a in fbDoCopy (pSrcDrawable=0x13dec20,
pDstDrawable=0x13de120, pGC=0xf9e610, xIn=0, yIn=0,
    widthSrc=<value optimised out>, heightSrc=300, xOut=0, yOut=0,
copyProc=0x7f2df0e9a810 <exaCopyNtoN>, bitPlane=0,
    closure=0x0) at ../../fb/fbcopy.c:596
        prgnSrcClip = 0x0
        freeSrcClip = 0
        prgnExposed = <value optimised out>
        rgnDst = {extents = {x1 = 1, y1 = 49, x2 = 301, y2 = 349}, data = 0x0}
        dx = 12870
        dy = 20835856
        box_x1 = <value optimised out>
        box_y1 = <value optimised out>
        box_x2 = <value optimised out>
        box_y2 = <value optimised out>
        fastSrc = <value optimised out>
        fastDst = <value optimised out>
        fastExpose = 1
#13 0x00007f2df0e9a793 in exaCopyArea (pSrcDrawable=0x13dec20,
pDstDrawable=0x13de120, pGC=0xf9e610, srcx=0,
    srcy=<value optimised out>, width=<value optimised out>,
height=300, dstx=0, dsty=0) at ../../exa/exa_accel.c:558
No locals.
#14 0x0000000000539fc8 in damageCopyArea (pSrc=0x13dec20,
pDst=0x13de120, pGC=0xf9e610, srcx=<value optimised out>,
    srcy=<value optimised out>, width=300, height=300, dstx=0, dsty=0)
at ../../../miext/damage/damage.c:949
        ret = <value optimised out>
        pGCPriv = 0xf9c200
        oldFuncs = 0x7cd380
#15 0x00007f2df15a1db2 in radeon_dri2_copy_region (drawable=<value
optimised out>, region=0x13f74f0,
    dest_buffer=<value optimised out>, src_buffer=<value optimised
out>) at ../../src/radeon_dri2.c:310
        src_private = <value optimised out>
        dst_private = 0x13df120
        pScreen = <value optimised out>
        pScrn = 0xf552f0
        src_pixmap = 0x13dec20
        dst_pixmap = 0x13de120
        copy_clip = <value optimised out>
        gc = 0xf9e610
        info = 0xf586e0
        vsync = 0
#16 0x00007f2df19d2303 in DRI2CopyRegion (pDraw=0x13de120,
pRegion=0x13f74f0, dest=0, src=1)
    at ../../../../hw/xfree86/dri2/dri2.c:420
        ds = 0xf60260
        pPriv = <value optimised out>
        pDestBuffer = 0x7fffcb9841f0
        pSrcBuffer = 0xffffffffffffffff
#17 0x00007f2df19d31d5 in ProcDRI2CopyRegion (client=0x13c8250) at
../../../../hw/xfree86/dri2/dri2ext.c:305
        rep = {type = 160 '\240', pad1 = 180 '\264', sequenceNumber =
125, length = 0, pad2 = 136, pad3 = 0,
          pad4 = 18345328, pad5 = 0, pad6 = 5345240, pad7 = 0}
        status = <value optimised out>
        pDrawable = 0x13de120
#18 ProcDRI2Dispatch (client=0x13c8250) at
../../../../hw/xfree86/dri2/dri2ext.c:350
        stuff = <value optimised out>
#19 0x000000000044dff4 in Dispatch () at ../../dix/dispatch.c:437
        result = <value optimised out>
        client = 0x13c8250
        nready = 0
        start_tick = 840
#20 0x0000000000433fa5 in main (argc=<value optimised out>,
argv=0x7fffcb984c68, envp=<value optimised out>)
    at ../../dix/main.c:397
        i = 1
        alwaysCheckForInput = {0, 1}

--- [5]

<booting with drm.debug=1>
$ dmesg
[  275.271877] [drm:drm_ioctl], ret = fffffff0
[  275.271880] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271892] [drm:drm_ioctl], ret = fffffff0
[  275.271895] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271907] [drm:drm_ioctl], ret = fffffff0
[  275.271911] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271922] [drm:drm_ioctl], ret = fffffff0
[  275.271926] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271937] [drm:drm_ioctl], ret = fffffff0
[  275.271941] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271952] [drm:drm_ioctl], ret = fffffff0
[  275.271955] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271967] [drm:drm_ioctl], ret = fffffff0
[  275.271970] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271982] [drm:drm_ioctl], ret = fffffff0
[  275.271985] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.271997] [drm:drm_ioctl], ret = fffffff0
[  275.272000] [drm:drm_ioctl], pid=1703, cmd=0xc0086464, nr=0x64, dev
0xe200, auth=1
[  275.272012] [drm:drm_ioctl], ret = fffffff0
-- 
Daniel J Blueman
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Xorg.0.log
Type: text/x-log
Size: 13838 bytes
Desc: not available
Url : http://lists.x.org/archives/xorg-driver-ati/attachments/20090930/a287e9cc/attachment-0001.bin 


More information about the xorg-driver-ati mailing list