radeonsi glthread crash regression
System information
- OS:
Arch Linux
- GPU:
Navi 24 [Radeon RX 6400/6500 XT/6500M] [1002:743F]
- Kernel version:
6.1.1
- Mesa version:
22.3.1
- Xserver version (if applicable):
1.21.1.6
- Desktop manager and compositor:
i3
Describe the issue
Since glthread is enabled by default (d6fabe49), I have several app crashing, typically on resize event:
(gdb) bt full
#0 dri_is_thread_safe () at ../mesa-22.3.1/src/egl/drivers/dri2/egl_dri2.c:164
#1 0x00007fda9e4afef3 in dri_create_context () at ../mesa-22.3.1/src/gallium/frontends/dri/dri_context.c:220
#2 0x00007fda9e4b35de in driCreateContextAttribs () at ../mesa-22.3.1/src/gallium/frontends/dri/dri_util.c:642
#3 0x00007fda9e4b3772 in driCreateNewContextForAPI () at ../mesa-22.3.1/src/gallium/frontends/dri/dri_util.c:659
#4 driCreateNewContext () at ../mesa-22.3.1/src/gallium/frontends/dri/dri_util.c:667
#5 0x00007fdaa4d56034 in loader_dri3_blit_context_get () at ../mesa-22.3.1/src/loader/loader_dri3_helper.c:173
#6 loader_dri3_blit_image () at ../mesa-22.3.1/src/loader/loader_dri3_helper.c:222
#7 loader_dri3_blit_image () at ../mesa-22.3.1/src/loader/loader_dri3_helper.c:208
#8 0x00007fdaa4d58412 in dri3_get_buffer () at ../mesa-22.3.1/src/loader/loader_dri3_helper.c:2098
#9 0x00007fdaa4d587bb in loader_dri3_get_buffers () at ../mesa-22.3.1/src/loader/loader_dri3_helper.c:2287
#10 0x00007fda9e4ad41a in dri_image_drawable_get_buffers () at ../mesa-22.3.1/src/gallium/frontends/dri/dri2.c:290
#11 0x00007fda9e4ad5b1 in dri2_allocate_textures () at ../mesa-22.3.1/src/gallium/frontends/dri/dri2.c:465
#12 0x00007fda9e4b0685 in dri_st_framebuffer_validate () at ../mesa-22.3.1/src/gallium/frontends/dri/dri_drawable.c:82
#13 0x00007fda9e577eca in st_framebuffer_validate () at ../mesa-22.3.1/src/mesa/state_tracker/st_manager.c:236
#14 0x00007fda9e578a56 in st_manager_validate_framebuffers () at ../mesa-22.3.1/src/mesa/state_tracker/st_manager.c:1340
#15 0x00007fda9e552306 in st_validate_state () at ../mesa-22.3.1/src/mesa/state_tracker/st_atom.c:231
#16 0x00007fda9e740aca in st_Clear () at ../mesa-22.3.1/src/mesa/state_tracker/st_cb_clear.c:432
#17 0x00007fda9e765878 in _mesa_unmarshal_Clear () at src/mapi/glapi/gen/marshal_generated1.c:206
#18 0x00007fda9e6d9ec8 in glthread_unmarshal_batch () at ../mesa-22.3.1/src/mesa/main/glthread.c:65
#19 0x00007fda9e4bc966 in util_queue_thread_func () at ../mesa-22.3.1/src/util/u_queue.c:309
#20 0x00007fda9e50c43c in impl_thrd_routine () at ../mesa-22.3.1/src/c11/impl/threads_posix.c:67
#21 0x00007fdac109f8fd in start_thread (arg=<optimized out>) at pthread_create.c:442
ret = <optimized out>
pd = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140576351577792, -1318832898623182708, -128, 0, 140576359965488, 140576343187456, 1298838280782440588, 1299027241356585100}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#22 0x00007fdac1121a60 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
(gdb) list
159
160 static GLboolean
161 dri_is_thread_safe(void *loaderPrivate)
162 {
163 struct dri2_egl_surface *dri2_surf = loaderPrivate;
164 UNUSED _EGLDisplay *display = dri2_surf->base.Resource.Display;
165
166 #ifdef HAVE_X11_PLATFORM
167 Display *xdpy = (Display*)display->PlatformDisplay;
168
(gdb) info locals
No locals.
(gdb) disas
Dump of assembler code for function dri_is_thread_safe:
0x00007fdaa4d454e0 <+0>: endbr64
=> 0x00007fdaa4d454e4 <+4>: mov rax,QWORD PTR [rdi]
0x00007fdaa4d454e7 <+7>: mov rdx,QWORD PTR [rax+0x50]
0x00007fdaa4d454eb <+11>: mov eax,DWORD PTR [rax+0x48]
0x00007fdaa4d454ee <+14>: test eax,eax
0x00007fdaa4d454f0 <+16>: jne 0x7fdaa4d45508 <dri_is_thread_safe+40>
0x00007fdaa4d454f2 <+18>: test rdx,rdx
0x00007fdaa4d454f5 <+21>: je 0x7fdaa4d45508 <dri_is_thread_safe+40>
0x00007fdaa4d454f7 <+23>: cmp QWORD PTR [rdx+0x968],0x0
0x00007fdaa4d454ff <+31>: setne al
0x00007fdaa4d45502 <+34>: ret
0x00007fdaa4d45503 <+35>: nop DWORD PTR [rax+rax*1+0x0]
0x00007fdaa4d45508 <+40>: mov eax,0x1
0x00007fdaa4d4550d <+45>: ret
End of assembler dump.
(gdb) p $rdi
$1 = 0
This happens even with GALLIUM_THREAD=0
. Is it the correct way of disabling the threading?
Regression
d6fabe49cd72fb7f7087b12efd8a9e3371e36c01 is the first bad commit
commit d6fabe49cd72fb7f7087b12efd8a9e3371e36c01
Author: Marek Olšák <marek.olsak@amd.com>
Date: Tue Aug 9 20:44:27 2022 -0400
radeonsi: enable glthread by default
Let's enable it and see what happens. This should mostly be a win.
Reviewed-by: Mihai Preda <mhpreda@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Acked-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18223>
src/gallium/drivers/radeonsi/driinfo_radeonsi.h | 1 +
1 file changed, 1 insertion(+)