From 37b217b0fb5b4d53edf544f77033c778bbcf844c Mon Sep 17 00:00:00 2001 From: Yogesh Mohan Marimuthu Date: Tue, 22 Oct 2024 06:50:48 +0530 Subject: [PATCH] winsys/amdgpu: destroy bo_fence_lock late in do_winsys_deinit() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In case of userq when destroying bo, fences are gathered and passed to kernel. Fences are gathered using bo_fence_lock, In do_winsys_deinit() currently bo_cache is destroyed after destroying bo_fence_lock. This leads to crash. Fix this by moving destroying bo_fence_lock late in do_winsys_deinit(). Reviewed-by: Marek Olšák Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index 460e28b22d5..639e57b5c85 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -91,7 +91,6 @@ static void do_winsys_deinit(struct amdgpu_winsys *aws) if (util_queue_is_initialized(&aws->cs_queue)) util_queue_destroy(&aws->cs_queue); - simple_mtx_destroy(&aws->bo_fence_lock); if (aws->bo_slabs.groups) pb_slabs_deinit(&aws->bo_slabs); pb_cache_deinit(&aws->bo_cache); @@ -105,6 +104,7 @@ static void do_winsys_deinit(struct amdgpu_winsys *aws) ac_addrlib_destroy(aws->addrlib); amdgpu_device_deinitialize(aws->dev); drmSyncobjDestroy(aws->fd, aws->vm_timeline_syncobj); + simple_mtx_destroy(&aws->bo_fence_lock); FREE(aws); }