panfrost: bifrost: segfault when starting kodi on Odroid N2+
System information
- OS: PLD Linux
- GPU: G52
- Kernel version: 5.18.14
- Mesa version: 22.1.5
Describe the issue
Just starting Kodi (confirmed also with gstreamer) results in segfault. Relevant part of stacktrace:
#0 bi_allocate_registers (ctx=ctx@entry=0xffffec02db40, success=success@entry=0xfffff56baadf, full_regs=full_regs@entry=false) at ../src/panfrost/bifrost/bi_ra.c:346
#1 0x0000ffffe566e888 in bi_register_allocate (ctx=0xffffec02db40) at ../src/panfrost/bifrost/bi_ra.c:580
#2 0x0000ffffe568702c in bi_compile_variant_nir (idvs=BI_IDVS_NONE, info=..., sysval_to_id=<optimized out>, binary=0xfffff56bafb0, inputs=0xfffff56bb038, nir=<optimized out>) at ../src/panfrost/bifrost/bifrost_compile.c:4632
#3 bi_compile_variant (nir=0xffffec04f630, inputs=0xfffff56bb038, binary=0xfffff56bafb0, sysval_to_id=<optimized out>, info=0xffffec0b1e60, idvs=BI_IDVS_NONE) at ../src/panfrost/bifrost/bifrost_compile.c:4705
#4 0x0000ffffe568811c in bifrost_compile_shader_nir (nir=nir@entry=0xffffec04f630, inputs=inputs@entry=0xfffff56bb038, binary=binary@entry=0xfffff56bafb0, info=info@entry=0xffffec0b1e60) at ../src/panfrost/bifrost/bifrost_compile.c:4817
#5 0x0000ffffe5718034 in pan_shader_compile_v7 (s=0xffffec04f630, inputs=inputs@entry=0xfffff56bb038, binary=binary@entry=0xfffff56bafb0, info=info@entry=0xffffec0b1e60) at ../src/panfrost/lib/pan_shader.c:189
#6 0x0000ffffe571576c in pan_blitter_get_blit_shader (dev=dev@entry=0xffffec0b5888, key=key@entry=0xffffe5afe288 <prefill>) at ../src/panfrost/lib/pan_blitter.c:588
#7 0x0000ffffe5716a60 in pan_blitter_prefill_blit_shader_cache (dev=0xffffec0b5888) at ../src/panfrost/lib/pan_blitter.c:1446
#8 pan_blitter_init_v7 (dev=0xffffec0b5888, bin_pool=0xffffec0bedd8, desc_pool=0xffffec0bee20) at ../src/panfrost/lib/pan_blitter.c:1462
#9 0x0000ffffe5632ba4 in panfrost_cmdstream_screen_init_v7 (screen=screen@entry=0xffffec0b5690) at ../src/gallium/drivers/panfrost/pan_cmdstream.c:4081
#10 0x0000ffffe56148e8 in panfrost_create_screen (fd=<optimized out>, ro=ro@entry=0xffffec0b5440) at ../src/gallium/drivers/panfrost/pan_screen.c:909
#11 0x0000ffffe5632e60 in panfrost_drm_screen_create_renderonly (ro=ro@entry=0xffffec0b5440) at ../src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c:123
#12 0x0000ffffe54a768c in kmsro_drm_screen_create (fd=11, config=0xfffff56bb288) at ../src/gallium/winsys/kmsro/drm/kmsro_drm_winsys.c:107
#13 0x0000ffffe4e5241c in pipe_kmsro_create_screen (fd=<optimized out>, config=<optimized out>) at ../src/gallium/auxiliary/target-helpers/drm_helper.h:166
#14 0x0000ffffe54505dc in pipe_loader_create_screen_vk (dev=0xffffec0ae880, sw_vk=sw_vk@entry=false) at ../src/gallium/auxiliary/pipe-loader/pipe_loader.c:173
#15 0x0000ffffe545061c in pipe_loader_create_screen (dev=<optimized out>) at ../src/gallium/auxiliary/pipe-loader/pipe_loader.c:179
#16 0x0000ffffe4e58ca4 in dri2_init_screen (sPriv=0xffffec0abfe0) at ../src/gallium/frontends/dri/dri2.c:2463
#17 0x0000ffffe4e5607c in driCreateNewScreen2 (scrn=0, fd=10, extensions=0xffffe6080350 <gbm_dri_screen_extensions>, driver_extensions=<optimized out>, driver_configs=0xffffec052b88, data=0xffffec052a30) at ../src/gallium/frontends/dri/dri_util.c:138
#18 0x0000ffffe6052274 in dri_screen_create_dri2 (dri=dri@entry=0xffffec052a30, driver_name=<optimized out>) at ../src/gbm/backends/dri/gbm_dri.c:434
#19 0x0000ffffe605292c in dri_screen_create (dri=0xffffec052a30) at ../src/gbm/backends/dri/gbm_dri.c:511
#20 dri_device_create (fd=10, gbm_backend_version=1) at ../src/gbm/backends/dri/gbm_dri.c:1471
#21 0x0000ffffe60507ec in backend_create_device (fd=10, bd=0xffffe60702a0 <builtin_backends>) at ../src/gbm/main/backend.c:101
#22 find_backend (name=name@entry=0x0, fd=fd@entry=10) at ../src/gbm/main/backend.c:159
#23 0x0000ffffe60508e8 in _gbm_create_device (fd=fd@entry=10) at ../src/gbm/main/backend.c:225
#24 0x0000ffffe605096c in gbm_create_device (fd=10) at ../src/gbm/main/gbm.c:138
It refers to: https://gitlab.freedesktop.org/mesa/mesa/-/blob/mesa-22.1.5/src/panfrost/bifrost/bi_ra.c#L343-347
Which in turn calls:
https://gitlab.freedesktop.org/mesa/mesa/-/blob/mesa-22.1.5/src/panfrost/bifrost/compiler.h#L872-879
And since ins->src[0].type == BI_INDEX_REGISTER
then node == ~0
resulting in l->solutions[node]
causing segfault.
Regression
I believe it's caused by: 7ead2568
Edited by Jan Palus