From 0e11e8ba89400cba55815aa10be46f7d36e93044 Mon Sep 17 00:00:00 2001 From: Eduardo Lima Mitev Date: Fri, 24 Jan 2020 12:02:22 +0000 Subject: [PATCH] turnip: Remove failed command buffer from pool When an error condition occurs during tu_create_cmd_buffer(), the cmd buffer has already been added to a pool, so the cleanup code should remove it. Fixes a crash (assert in tu_device::tu_bo_finish()) in dEQP tests: dEQP-VK.api.object_management.max_concurrent.command_buffer_primary dEQP-VK.api.object_management.max_concurrent.command_buffer_secondary due to pool attempting to destroy an invalid command buffer. Reviewed-by: Kristian H. Kristensen Reviewed-by: Eric Anholt Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 7dc83c5356b..4cb47cef946 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -1667,7 +1667,7 @@ tu_create_cmd_buffer(struct tu_device *device, VkResult result = tu_bo_init_new(device, &cmd_buffer->scratch_bo, 0x1000); if (result != VK_SUCCESS) - return result; + goto fail_scratch_bo; #define VSC_DATA_SIZE(pitch) ((pitch) * 32 + 0x100) /* extra size to store VSC_SIZE */ #define VSC_DATA2_SIZE(pitch) ((pitch) * 32) @@ -1690,6 +1690,8 @@ fail_vsc_data2: tu_bo_finish(cmd_buffer->device, &cmd_buffer->vsc_data); fail_vsc_data: tu_bo_finish(cmd_buffer->device, &cmd_buffer->scratch_bo); +fail_scratch_bo: + list_del(&cmd_buffer->pool_link); return result; } -- 2.30.2