[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