radeon: Crash in radeon_bo_can_reclaim_slab
X process crashes with Mesa 24.0 and 24.0.1 in radeon_bo_can_reclaim_slab
when running any GTK app.
Backtrace from Mesa 24.0.1:
Thread 1 "X" received signal SIGSEGV, Segmentation fault.
radeon_bo_reference (src=0x0, dst=0x55558a1ff2f0, rws=0x0) at ../src/gallium/include/winsys/radeon_winsys.h:791
791 rws->buffer_destroy(rws, old);
(gdb) bt
#0 radeon_bo_reference (src=0x0, dst=0x55558a1ff2f0, rws=0x0) at ../src/gallium/include/winsys/radeon_winsys.h:791
#1 radeon_ws_bo_reference (src=0x0, dst=0x55558a1ff2f0, rws=0x0) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.h:73
#2 radeon_bo_is_busy (rws=rws@entry=0x0, bo=0x55558a285980) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:65
#3 0x00007fffefd63c00 in radeon_bo_is_busy (bo=<optimized out>, rws=0x0) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:56
#4 radeon_bo_wait (usage=805306368, timeout=0, _buf=<optimized out>, rws=0x0) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:120
#5 radeon_bo_can_reclaim (_buf=<optimized out>, winsys=0x0) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:725
#6 radeon_bo_can_reclaim (_buf=<optimized out>, winsys=0x0) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:718
#7 radeon_bo_can_reclaim_slab (priv=<optimized out>, entry=<optimized out>) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:732
#8 0x00007ffff00bbe18 in pb_slabs_reclaim_locked (slabs=slabs@entry=0x555589557188) at ../src/gallium/auxiliary/pipebuffer/pb_slab.c:83
#9 0x00007ffff00bc030 in pb_slab_alloc_reclaimed (slabs=slabs@entry=0x555589557188, size=size@entry=2304, heap=heap@entry=16, reclaim_all=reclaim_all@entry=false) at ../src/gallium/auxiliary/pipebuffer/pb_slab.c:160
#10 0x00007ffff00bc19c in pb_slab_alloc (slabs=slabs@entry=0x555589557188, size=size@entry=2304, heap=heap@entry=16) at ../src/gallium/auxiliary/pipebuffer/pb_slab.c:201
#11 0x00007fffefd62d3c in radeon_winsys_bo_create (rws=0x555589556f60, size=<optimized out>, alignment=<optimized out>, domain=RADEON_DOMAIN_GTT, flags=<optimized out>) at ../src/gallium/winsys/radeon/drm/radeon_drm_bo.c:1004
#12 0x00007fffefeaef40 in si_alloc_resource (sscreen=sscreen@entry=0x555589559250, res=res@entry=0x55558a25ad80) at ../src/gallium/drivers/radeonsi/si_buffer.c:150
#13 0x00007fffefe79c78 in si_texture_create_object (screen=0x555589559250, screen@entry=0x0, base=base@entry=0x7ffffbb4d7e8, surface=surface@entry=0x7ffffbb4d938, plane0=plane0@entry=0x0, imported_buf=imported_buf@entry=0x0, offset=0,
pitch_in_bytes=pitch_in_bytes@entry=0, alloc_size=2304, alloc_size@entry=0, alignment=<optimized out>, alignment@entry=256) at ../src/gallium/drivers/radeonsi/si_texture.c:1005
#14 0x00007fffefe7aadc in si_texture_create_with_modifier (screen=0x0, templ=0x0, modifier=0) at ../src/gallium/drivers/radeonsi/si_texture.c:1358
#15 0x00007fffefe78888 in si_texture_transfer_map (ctx=0x5555896874c0, texture=0x55558a2f07c0, level=<optimized out>, usage=<optimized out>, box=0x7fffe462a738, ptransfer=<optimized out>)
at ../src/gallium/drivers/radeonsi/si_texture.c:1965
#16 0x00007ffff00c6314 in u_default_texture_subdata (pipe=0x5555896874c0, resource=0x55558a2f07c0, level=<optimized out>, usage=<optimized out>, box=0x7fffe462a738, data=0x7fffe462a758, stride=12, layer_stride=108)
at ../src/gallium/auxiliary/util/u_transfer.c:95
#17 0x00007fffefc145dc in tc_call_texture_subdata (pipe=<optimized out>, call=0x7fffe462a728) at ../src/gallium/auxiliary/util/u_threaded_context.c:3221
#18 0x00007fffefc11768 in batch_execute (parsing=false, last=0x7fffe462abd0, pipe=0x5555896874c0, batch=0x7fffe462a0c8) at ../src/gallium/auxiliary/util/u_threaded_context.c:461
#19 tc_batch_execute (job=job@entry=0x7fffe462a0c8, gdata=gdata@entry=0x0, thread_index=thread_index@entry=0) at ../src/gallium/auxiliary/util/u_threaded_context.c:512
#20 0x00007fffefc12018 in _tc_sync (tc=tc@entry=0x7fffe4628010, func=<optimized out>, info=<optimized out>) at ../src/gallium/auxiliary/util/u_threaded_context.c:767
#21 0x00007fffefc1b7f8 in tc_flush (_pipe=0x7fffe4628010, fence=0x0, flags=0) at ../src/gallium/auxiliary/util/u_threaded_context.c:3699
#22 0x00007fffef6fb564 in st_flush (flags=0, fence=0x0, st=0x5555896d2400) at ../src/mesa/state_tracker/st_cb_flush.c:63
#23 st_glFlush (ctx=<optimized out>, gallium_flush_flags=0) at ../src/mesa/state_tracker/st_cb_flush.c:99
#24 0x00007fffed8b172c in ?? () from /usr/lib64/X11/modules/libglamoregl.so
#25 0x00007ffff0e20be4 in ?? () from /usr/lib64/X11/modules/drivers/radeon_drv.so
#26 0x00005555586b4eb4 in BlockHandler ()
#27 0x000055555881a498 in WaitForSomething ()
#28 0x00005555586afd80 in ?? ()
#29 0x00005555586b4338 in ?? ()
#30 0x00007ffff1a1159c in __libc_start_call_main (main=main@entry=0x55555869c7d4, argc=argc@entry=1, argv=argv@entry=0x7ffffbb4ec38) at ../sysdeps/nptl/libc_start_call_main.h:58
#31 0x00007ffff1a11688 in __libc_start_main_impl (main=0x55555869c7d4, argc=1, argv=0x7ffffbb4ec38, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=<optimized out>) at libc-start.c:360
#32 0x000055555869c820 in _start ()
I see this on linux 6.7.3 with X.Org X Server 1.21.1.11, on Radeon R7 350 (some no-name OEM card).
# lspci -nn | grep VGA
07:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Oland XT [Radeon HD 8670 / R5 340X OEM / R7 250/350/350X OEM] [1002:6610]
# DISPLAY=:0 glxinfo -B | grep "OpenGL version string"
OpenGL version string: 4.5 (Compatibility Profile) Mesa 24.0.1
On the same system, it works fine if I downgrade Mesa to 23.3.5
.