From cbd85acf9a68168c8b5867894520cd5173c09baa Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Fri, 9 May 2025 10:26:18 +0200 Subject: [PATCH] v3dv: free indirect CSD job with queue cpu The indirect CSD job is added to the list of jobs when the device do not support CPU queues. Otherwise it is not added, which means the job is not free when the command buffer frees all the resources, generating a leak. This fixes this leak by identifying the job that contains the indirect CSD job, and freeing it before freeing the job itself. Signed-off-by: Juan A. Suarez Romero Reviewed-by: Iago Toral Quiroga Part-of: --- src/broadcom/ci/broadcom-rpi4-skips.txt | 22 ---------------------- src/broadcom/vulkan/v3dv_cmd_buffer.c | 3 +++ 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/src/broadcom/ci/broadcom-rpi4-skips.txt b/src/broadcom/ci/broadcom-rpi4-skips.txt index 1e1b4aea0d8..1d0a2be6661 100644 --- a/src/broadcom/ci/broadcom-rpi4-skips.txt +++ b/src/broadcom/ci/broadcom-rpi4-skips.txt @@ -161,25 +161,3 @@ dEQP-VK.synchronization2.signal_order.shared_binary_semaphore.write_ssbo_vertex_ # Leaky in VKCTS 1.4.1.1 asan-dEQP-VK.video.* - -# More leaks, pending to investigate -asan-dEQP-VK.synchronization.cross_instance.suballocated.write_ssbo_compute_indirect_read_ssbo_vertex.buffer_262144_binary_semaphore_fd -asan-dEQP-VK.synchronization.op.single_queue.event.write_ssbo_compute_indirect_read_vertex_input.buffer_16384 -asan-dEQP-VK.synchronization.op.single_queue.fence.write_draw_indirect_read_image_compute_indirect.image_128x128_r16g16b16a16_uint -asan-dEQP-VK.synchronization2.cross_instance.dedicated.write_ssbo_compute_indirect_read_ubo_compute.buffer_16384_binary_semaphore_dma_buf -asan-dEQP-VK.synchronization2.cross_instance.suballocated.write_fill_buffer_read_ubo_compute_indirect.buffer_16384_binary_semaphore_fd -asan-dEQP-VK.synchronization2.op.single_queue.barrier.write_clear_attachments_read_image_compute_indirect.image_128x128_r8_unorm -asan-dEQP-VK.synchronization2.op.single_queue.barrier.write_draw_read_image_compute_indirect.image_128x128_r8g8b8a8_unorm -asan-dEQP-VK.synchronization2.op.single_queue.barrier.write_image_compute_indirect_read_copy_image.image_64x64x8_r32_sfloat -asan-dEQP-VK.synchronization2.op.single_queue.barrier.write_image_compute_indirect_read_image_compute_indirect.image_64x64x8_r32_sfloat -asan-dEQP-VK.synchronization2.op.single_queue.barrier.write_image_vertex_read_image_compute_indirect.image_128x128_r16_uint_specialized_access_flag -asan-dEQP-VK.synchronization2.op.single_queue.binary_semaphore.write_image_compute_indirect_read_image_geometry.image_128x128_r16_uint -asan-dEQP-VK.synchronization2.op.single_queue.event.write_blit_image_read_image_compute_indirect.image_64x64x8_r32_sfloat_specialized_access_flag -asan-dEQP-VK.synchronization2.op.single_queue.event.write_image_compute_indirect_read_image_vertex.image_64x64x8_r32_sfloat -asan-dEQP-VK.synchronization2.op.single_queue.event.write_ssbo_compute_indirect_read_ssbo_fragment.buffer_262144_specialized_access_flag -asan-dEQP-VK.synchronization2.op.single_queue.event.write_ssbo_compute_indirect_read_ubo_texel_geometry.buffer_16384 -asan-dEQP-VK.synchronization2.op.single_queue.fence.write_copy_image_to_buffer_read_ubo_compute_indirect.buffer_16384 -asan-dEQP-VK.synchronization2.op.single_queue.fence.write_image_compute_indirect_read_image_vertex.image_64x64x8_r32_sfloat_specialized_access_flag -asan-dEQP-VK.synchronization2.timeline_semaphore.device_host.write_image_compute_indirect_read_image_fragment.image_128x128_r16_uint -asan-dEQP-VK.synchronization2.timeline_semaphore.one_to_n.write_image_compute_read_image_compute_indirect.image_128x128_r16_uint -asan-dEQP-VK.synchronization2.timeline_semaphore.wait_before_signal.write_image_compute_read_image_compute_indirect.image_128x128_r16g16b16a16_uint diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index 7ee0d9bc99d..449544662d6 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -260,6 +260,9 @@ cmd_buffer_free_resources(struct v3dv_cmd_buffer *cmd_buffer) { list_for_each_entry_safe(struct v3dv_job, job, &cmd_buffer->jobs, list_link) { + if (job->type == V3DV_JOB_TYPE_CPU_CSD_INDIRECT && + cmd_buffer->device->pdevice->caps.cpu_queue) + v3dv_job_destroy(job->cpu.csd_indirect.csd_job); v3dv_job_destroy(job); }