Crash in GPU
Discovered when testing libcamera with GPU processing on kernel 6.0.0-1-librem5:
DISPLAY=:0 WL_DISPLAY=:0 LIBCAMERA_LOG_LEVELS="*:0" GST_DEBUG="libcamera*:7" GST_PLUGIN_PATH=/home/purism/caminstall/lib/aarch64-linux-gnu/gstreamer-1.0/ LD_LIBRARY_PATH=/home/purism/caminstall/lib/aarch64-linux-gnu/ gst-launch-1.0 libcamerasrc camera-name="/base/soc\@0/bus\@30800000/i2c\@30a50000/camera\@2d" ! 'video/x-raw,format=BGRA,width=1052,height=780' ! glimagesink
Interrupting this process (which is not doing proper cleanup) yields:
[ 80.412658] ------------[ cut here ]------------
[ 80.412682] Memory manager not clean during takedown.
[ 80.412742] WARNING: CPU: 0 PID: 2052 at drivers/gpu/drm/drm_mm.c:999 drm_mm_takedown+0x30/0x40
[ 80.412773] Modules linked in: overlay usb_f_acm u_serial usb_f_ecm u_ether ofpart binfmt_misc spi_nor mtd caam_jr caamhash_desc hi846 caamalg_desc crypto_engine st_lsm6dsx_spi hantro_vpu(C) snd_soc_gtm601 imx7_media_csi(C) snd_soc_simple_card v4l2_vp9 v4l2_h264 snd_soc_simple_card_utils v4l2_mem2mem videobuf2_dma_contig dw9714 videobuf2_memops st_lsm6dsx_i2c imx8mq_mipi_csi2(C) s5k3l6xx leds_lm3560 v4l2_flash_led_class videobuf2_v4l2 v4l2_fwnode mousedev st_lsm6dsx vcnl4000 videobuf2_common v4l2_async industrialio_triggered_buffer kfifo_buf snd_soc_wm8962 videodev mc gnss_mtk gnss_serial gnss snd_soc_fsl_sai snd_soc_fsl_utils imx_pcm_dma snd_soc_core snd_pcm_dmaengine imx_sdma snd_pcm virt_dma snd_timer snd soundcore imx2_wdt caam error rfkill_hks watchdog rfkill libcomposite ledtrig_timer ledtrig_pattern fuse zram ip_tables x_tables ipv6 uas usb_storage xhci_plat_hcd xhci_hcd usbcore aes_ce_blk dwc3 crct10dif_ce ghash_ce cdns_mhdp_imx ulpi pwm_vibra cdns_mhdp_drmcore sha2_ce
[ 80.413094] drm_display_helper udc_core sha1_ce usb_common imx_dcss bq25890_charger phy_fsl_imx8mq_usb edt_ft5x06 tps6598x typec clk_bd718x7 roles snvs_pwrkey
[ 80.413149] CPU: 0 PID: 2052 Comm: task0 Tainted: G C 6.0.0-1-librem5 #1
[ 80.413159] Hardware name: Purism Librem 5r4 (DT)
[ 80.413166] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 80.413176] pc : drm_mm_takedown+0x30/0x40
[ 80.413184] lr : drm_mm_takedown+0x30/0x40
[ 80.413192] sp : ffff80000cd43950
[ 80.413196] x29: ffff80000cd43950 x28: 0000ffff9c944418 x27: fffffffffffffe00
[ 80.413212] x26: 0000000045585401 x25: ffff00002e905c80 x24: dead000000000100
[ 80.413228] x23: dead000000000122 x22: ffff0000bc317ba0 x21: ffff80000ae6f000
[ 80.413243] x20: ffff80000ae6f000 x19: ffff000031af3800 x18: 000000000000001c
[ 80.413258] x17: 000000000000001e x16: 0000000000000000 x15: 000000000016e360
[ 80.413273] x14: 0000000000000000 x13: 2e6e776f64656b61 x12: 7420676e69727564
[ 80.413288] x11: 00000000ffffdfff x10: 00000000ffffdfff x9 : ffff8000080b592c
[ 80.413303] x8 : 000000000002ffe8 x7 : c0000000ffffdfff x6 : 0000000000017ff4
[ 80.413318] x5 : ffff0000bf92c9d0 x4 : 0000000000000000 x3 : 0000000000000027
[ 80.413332] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff00002e905880
[ 80.413348] Call trace:
[ 80.413352] drm_mm_takedown+0x30/0x40
[ 80.413362] etnaviv_iommuv2_free+0x28/0xe0
[ 80.413374] etnaviv_iommu_unmap_gem+0xcc/0x130
[ 80.413384] etnaviv_gem_free_object+0x98/0x110
[ 80.413393] drm_gem_object_free+0x24/0x40
[ 80.413407] drm_gem_object_handle_put_unlocked+0xd0/0xf4
[ 80.413418] drm_gem_object_release_handle+0x60/0x7c
[ 80.413429] idr_for_each+0x68/0xfc
[ 80.413441] drm_gem_release+0x30/0x50
[ 80.413452] drm_file_free.part.0+0x1e0/0x230
[ 80.413462] drm_close_helper.isra.0+0x64/0x74
[ 80.413472] drm_release+0x70/0x150
[ 80.413482] __fput+0x78/0x230
[ 80.413493] ____fput+0x18/0x24
[ 80.413502] task_work_run+0x88/0x1a0
[ 80.413512] do_exit+0x2e4/0x970
[ 80.413525] do_group_exit+0x3c/0xb0
[ 80.413535] get_signal+0x8cc/0x940
[ 80.413543] do_notify_resume+0x17c/0xfcc
[ 80.413556] el0_svc+0x78/0x90
[ 80.413569] el0t_64_sync_handler+0xb8/0xc0
[ 80.413579] el0t_64_sync+0x18c/0x190
[ 80.413588] ---[ end trace 0000000000000000 ]---
[ 80.414927] Unable to handle kernel paging request at virtual address ffff80000b103ec8
[ 80.423466] Mem abort info:
[ 80.427270] ESR = 0x0000000096000047
[ 80.431246] EC = 0x25: DABT (current EL), IL = 32 bits
[ 80.436652] SET = 0, FnV = 0
[ 80.439884] EA = 0, S1PTW = 0
[ 80.443127] FSC = 0x07: level 3 translation fault
[ 80.448097] Data abort info:
[ 80.451052] ISV = 0, ISS = 0x00000047
[ 80.454967] CM = 0, WnR = 1
[ 80.457993] swapper pgtable: 4k pages, 48-bit VAs, pgdp=000000008191c000
[ 80.464721] [ffff80000b103ec8] pgd=10000000fffff003, p4d=10000000fffff003, pud=10000000ffffe003, pmd=10000000ff36e003, pte=0000000000000000
[ 80.477354] Internal error: Oops: 96000047 [#1] PREEMPT SMP
[ 80.482929] Modules linked in: overlay usb_f_acm u_serial usb_f_ecm u_ether ofpart binfmt_misc spi_nor mtd caam_jr caamhash_desc hi846 caamalg_desc crypto_engine st_lsm6dsx_spi hantro_vpu(C) snd_soc_gtm601 imx7_media_csi(C) snd_soc_simple_card v4l2_vp9 v4l2_h264 snd_soc_simple_card_utils v4l2_mem2mem videobuf2_dma_contig dw9714 videobuf2_memops st_lsm6dsx_i2c imx8mq_mipi_csi2(C) s5k3l6xx leds_lm3560 v4l2_flash_led_class videobuf2_v4l2 v4l2_fwnode mousedev st_lsm6dsx vcnl4000 videobuf2_common v4l2_async industrialio_triggered_buffer kfifo_buf snd_soc_wm8962 videodev mc gnss_mtk gnss_serial gnss snd_soc_fsl_sai snd_soc_fsl_utils imx_pcm_dma snd_soc_core snd_pcm_dmaengine imx_sdma snd_pcm virt_dma snd_timer snd soundcore imx2_wdt caam error rfkill_hks watchdog rfkill libcomposite ledtrig_timer ledtrig_pattern fuse zram ip_tables x_tables ipv6 uas usb_storage xhci_plat_hcd xhci_hcd usbcore aes_ce_blk dwc3 crct10dif_ce ghash_ce cdns_mhdp_imx ulpi pwm_vibra cdns_mhdp_drmcore sha2_ce
[ 80.483152] drm_display_helper udc_core sha1_ce usb_common imx_dcss bq25890_charger phy_fsl_imx8mq_usb edt_ft5x06 tps6598x typec clk_bd718x7 roles snvs_pwrkey
[ 80.583908] CPU: 0 PID: 2052 Comm: task0 Tainted: G WC 6.0.0-1-librem5 #1
[ 80.591999] Hardware name: Purism Librem 5r4 (DT)
[ 80.596702] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 80.603664] pc : etnaviv_iommuv2_unmap+0x34/0x50
[ 80.608292] lr : etnaviv_context_unmap+0x68/0x94
[ 80.612911] sp : ffff80000cd43910
[ 80.616223] x29: ffff80000cd43910 x28: 0000ffff9c944418 x27: fffffffffffffe00
[ 80.623362] x26: 0000000045585401 x25: ffff000031af3a00 x24: ffff00000d22b400
[ 80.630502] x23: ffff80000ae6f000 x22: 0000000000002000 x21: ffff80000ae6f000
[ 80.637641] x20: 0000000000000000 x19: 00000000fd3b2000 x18: 000000000000001c
[ 80.644779] x17: 000000000000001e x16: 0000000000000000 x15: 000000000016e360
[ 80.651918] x14: 0000000000000000 x13: 2e6e776f64656b61 x12: 7420676e69727564
[ 80.659057] x11: 00000000ffffdfff x10: 00000000ffffdfff x9 : ffff80000885ce68
[ 80.666196] x8 : ffff8000097b9640 x7 : ffff8000b6725000 x6 : 0000000000000000
[ 80.673334] x5 : 0000000000000002 x4 : 000000000000043c x3 : ffff80000ae6f000
[ 80.680473] x2 : ffff80000b103000 x1 : 00000000000003b2 x0 : 0000000000001000
[ 80.687613] Call trace:
[ 80.690057] etnaviv_iommuv2_unmap+0x34/0x50
[ 80.694329] etnaviv_iommu_remove_mapping+0x88/0xc4
[ 80.699208] etnaviv_iommu_unmap_gem+0xf8/0x130
[ 80.703739] etnaviv_gem_free_object+0x98/0x110
[ 80.708270] drm_gem_object_free+0x24/0x40
[ 80.712370] drm_gem_object_handle_put_unlocked+0xd0/0xf4
[ 80.717771] drm_gem_object_release_handle+0x60/0x7c
[ 80.722737] idr_for_each+0x68/0xfc
[ 80.726229] drm_gem_release+0x30/0x50
[ 80.729980] drm_file_free.part.0+0x1e0/0x230
[ 80.734338] drm_close_helper.isra.0+0x64/0x74
[ 80.738783] drm_release+0x70/0x150
[ 80.742272] __fput+0x78/0x230
[ 80.745330] ____fput+0x18/0x24
[ 80.748471] task_work_run+0x88/0x1a0
[ 80.752135] do_exit+0x2e4/0x970
[ 80.755367] do_group_exit+0x3c/0xb0
[ 80.758944] get_signal+0x8cc/0x940
[ 80.762433] do_notify_resume+0x17c/0xfcc
[ 80.766446] el0_svc+0x78/0x90
[ 80.769504] el0t_64_sync_handler+0xb8/0xc0
[ 80.773689] el0t_64_sync+0x18c/0x190
[ 80.777356] Code: d34c5421 52800045 d50323bf f8647862 (b8217845)
[ 80.783450] ---[ end trace 0000000000000000 ]---
[ 80.788197] Fixing recursive fault but reboot is needed!