egl,dri: Weston failing to initialize EGL after certain Mesa commit
From commit 27d91fec (part of !12336 (merged)) onwards, Weston is failing to start EGL and crashing. I did a bisect to ensure that this was the problematic commit.
I've tried to debug but didn't find anything wrong at first glance.
Here is the backtrace:
Thread 1 "weston" received signal SIGSEGV, Segmentation fault.
0x00007ffff72936ed in dri_destroy (gbm=0x555555581fe0) at ../src/gbm/backends/dri/gbm_dri.c:1406
1406 dri->core->destroyScreen(dri->screen);
(gdb) backtrace
#0 0x00007ffff72936ed in dri_destroy (gbm=0x555555581fe0) at ../src/gbm/backends/dri/gbm_dri.c:1406
#1 0x00007ffff7292578 in _gbm_device_destroy (gbm=<optimized out>) at ../src/gbm/main/backend.c:234
#2 0x00007ffff72b2cc6 in drm_backend_create (compositor=0x5555555692c0, config=0x7fffffffdc20) at ../libweston/backend-drm/drm.c:3138
#3 0x00007ffff72b2dc8 in weston_backend_init (compositor=0x5555555692c0, config_base=0x7fffffffdd00) at ../libweston/backend-drm/drm.c:3167
#4 0x00007ffff7d7e046 in weston_compositor_load_backend (compositor=0x5555555692c0, backend=WESTON_BACKEND_DRM, config_base=0x7fffffffdd00) at ../libweston/compositor.c:8188
#5 0x00007ffff7fb3bfb in load_drm_backend (c=0x5555555692c0, argc=0x7fffffffde8c, argv=0x7fffffffe3a8, wc=0x0) at ../compositor/main.c:2607
#6 0x00007ffff7fb53b7 in load_backend (compositor=0x5555555692c0, backend=0x555555568e40 "drm-backend.so", argc=0x7fffffffde8c, argv=0x7fffffffe3a8, config=0x0) at ../compositor/main.c:3090
#7 0x00007ffff7fb6264 in wet_main (argc=1, argv=0x7fffffffe3a8, test_data=0x0) at ../compositor/main.c:3406
#8 0x000055555555515e in main (argc=2, argv=0x7fffffffe3a8) at ../compositor/executable.c:33
And here is the log of Weston running (MESA_DEBUG=1
and EGL_LOG_LEVEL=debug
):
Weston log
[09:53:31.215] weston 9.0.90
https://wayland.freedesktop.org
Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
Build: 9.0.0-382-g5f5eb3a1
[09:53:31.215] Command line: ./build/compositor/weston --backend=drm-backend.so --tty=1
[09:53:31.215] OS: Linux, 5.14.15-zen1-1-zen, #1 ZEN SMP PREEMPT Wed, 27 Oct 2021 23:38:11 +0000, x86_64
...
[09:53:31.218] Loading module '/usr/lib/libweston-10/gl-renderer.so'
[09:53:31.235] EGL client extensions: EGL_EXT_device_base
EGL_EXT_device_enumeration EGL_EXT_device_query
EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses
EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device
EGL_EXT_platform_wayland EGL_KHR_platform_wayland
EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_MESA_platform_xcb
EGL_MESA_platform_gbm EGL_KHR_platform_gbm
EGL_MESA_platform_surfaceless
libEGL debug: MESA-LOADER: dlopen(/usr/lib/dri/radeonsi_dri.so)
libEGL debug: found extension DRI_Core' libEGL info: found extension DRI_Core version 2 libEGL debug: found extension DRI_IMAGE_DRIVER'
libEGL debug: found extension DRI_DRI2' libEGL info: found extension DRI_DRI2 version 4 libEGL debug: found extension DRI_ConfigOptions'
libEGL debug: found extension DRI_Core' libEGL debug: found extension DRI_IMAGE_DRIVER'
libEGL debug: found extension DRI_DRI2' libEGL debug: found extension DRI_ConfigOptions'
libEGL info: found extension DRI_ConfigOptions version 2
libEGL debug: found extension DRI_TexBuffer' libEGL info: found extension DRI_TexBuffer version 2 libEGL debug: found extension DRI2_Flush'
libEGL info: found extension DRI2_Flush version 4
libEGL debug: found extension DRI_RENDERER_QUERY' libEGL debug: found extension DRI_CONFIG_QUERY'
libEGL debug: found extension DRI2_Throttle' libEGL debug: found extension DRI2_Fence'
libEGL debug: found extension DRI2_Interop' libEGL debug: found extension DRI_NoError'
libEGL debug: found extension DRI2_Blob' libEGL debug: found extension DRI_MutableRenderBufferDriver'
libEGL debug: found extension DRI_IMAGE' libEGL info: found extension DRI_IMAGE version 19 libEGL debug: found extension DRI2_BufferDamage'
libEGL debug: found extension DRI_Robustness' libEGL debug: found extension DRI_TexBuffer'
libEGL debug: found extension DRI2_Flush' libEGL debug: found extension DRI_RENDERER_QUERY'
libEGL info: found extension DRI_RENDERER_QUERY version 1
libEGL debug: found extension DRI_CONFIG_QUERY' libEGL info: found extension DRI_CONFIG_QUERY version 2 libEGL debug: found extension DRI2_Throttle'
libEGL debug: found extension DRI2_Fence' libEGL info: found extension DRI2_Fence version 2 libEGL debug: found extension DRI2_Interop'
libEGL info: found extension DRI2_Interop version 1
libEGL debug: found extension DRI_NoError' libEGL info: found extension DRI_NoError version 1 libEGL debug: found extension DRI2_Blob'
libEGL info: found extension DRI2_Blob version 1
libEGL debug: found extension DRI_MutableRenderBufferDriver' libEGL info: found extension DRI_MutableRenderBufferDriver version 1 libEGL debug: found extension DRI_IMAGE'
libEGL info: found extension DRI_IMAGE version 19
libEGL debug: found extension DRI2_BufferDamage' libEGL info: found extension DRI2_BufferDamage version 1 libEGL debug: found extension DRI_Robustness'
libEGL info: found extension DRI_Robustness version 1
libEGL debug: did not find optional extension DRI_FlushControl version 1
libEGL debug: EGL user error 0x3001 (EGL_NOT_INITIALIZED) in eglInitialize: DRI2: failed to add configs
libEGL debug: MESA-LOADER: dlopen(/usr/lib/dri/radeonsi_dri.so)
libEGL debug: found extension DRI_Core' libEGL info: found extension DRI_Core version 2 libEGL debug: found extension DRI_IMAGE_DRIVER'
libEGL debug: found extension DRI_DRI2' libEGL info: found extension DRI_DRI2 version 4 libEGL debug: found extension DRI_ConfigOptions'
libEGL debug: found extension DRI_Core' libEGL debug: found extension DRI_IMAGE_DRIVER'
libEGL debug: found extension DRI_DRI2' libEGL debug: found extension DRI_ConfigOptions'
libEGL info: found extension DRI_ConfigOptions version 2
libEGL debug: found extension DRI_TexBuffer' libEGL info: found extension DRI_TexBuffer version 2 libEGL debug: found extension DRI2_Flush'
libEGL info: found extension DRI2_Flush version 4
libEGL debug: found extension DRI_RENDERER_QUERY' libEGL debug: found extension DRI_CONFIG_QUERY'
libEGL debug: found extension DRI2_Throttle' libEGL debug: found extension DRI2_Fence'
libEGL debug: found extension DRI2_Interop' libEGL debug: found extension DRI_NoError'
libEGL debug: found extension DRI2_Blob' libEGL debug: found extension DRI_MutableRenderBufferDriver'
libEGL debug: found extension DRI_IMAGE' libEGL info: found extension DRI_IMAGE version 19 libEGL debug: found extension DRI2_BufferDamage'
libEGL debug: found extension DRI_Robustness' libEGL debug: found extension DRI_TexBuffer'
libEGL debug: found extension DRI2_Flush' libEGL debug: found extension DRI_RENDERER_QUERY'
libEGL info: found extension DRI_RENDERER_QUERY version 1
libEGL debug: found extension DRI_CONFIG_QUERY' libEGL info: found extension DRI_CONFIG_QUERY version 2 libEGL debug: found extension DRI2_Throttle'
libEGL debug: found extension DRI2_Fence' libEGL info: found extension DRI2_Fence version 2 libEGL debug: found extension DRI2_Interop'
libEGL info: found extension DRI2_Interop version 1
libEGL debug: found extension DRI_NoError' libEGL info: found extension DRI_NoError version 1 libEGL debug: found extension DRI2_Blob'
libEGL info: found extension DRI2_Blob version 1
libEGL debug: found extension DRI_MutableRenderBufferDriver' libEGL info: found extension DRI_MutableRenderBufferDriver version 1 libEGL debug: found extension DRI_IMAGE'
libEGL info: found extension DRI_IMAGE version 19
libEGL debug: found extension DRI2_BufferDamage' libEGL info: found extension DRI2_BufferDamage version 1 libEGL debug: found extension DRI_Robustness'
libEGL info: found extension DRI_Robustness version 1
libEGL debug: did not find optional extension DRI_FlushControl version 1
libEGL debug: EGL user error 0x3001 (EGL_NOT_INITIALIZED) in eglInitialize: DRI2: failed to add configs
libEGL debug: EGL user error 0x3001 (EGL_NOT_INITIALIZED) in eglInitialize
[09:53:31.236] failed to initialize display
[09:53:31.236] EGL error state: EGL_NOT_INITIALIZED (0x3001)
[09:53:31.237] failed to initialize egl
fish: Job 1, './build/compositor/weston --bac…' terminated by signal SIGSEGV (Address boundary error)