From 22b5c9c65fe06798d98f7d42fd3648284f9f37b8 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Sun, 5 Nov 2023 18:10:07 -0800 Subject: [PATCH] venus: refactor instance creation failure path Make fail path more precise and slightly adjust cs_shmem to sit together with reply shmem pool. Signed-off-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_instance.c | 38 ++++++++++++++++----------------- src/virtio/vulkan/vn_instance.h | 12 +++++------ 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index 0dd657ff755..28a23e94291 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -649,33 +649,33 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, if (!vn_icd_supports_api_version( instance->base.base.app_info.api_version)) { result = VK_ERROR_INCOMPATIBLE_DRIVER; - goto fail; + goto out_mtx_destroy; } if (pCreateInfo->enabledLayerCount) { result = VK_ERROR_LAYER_NOT_PRESENT; - goto fail; + goto out_mtx_destroy; } result = vn_instance_init_renderer(instance); if (result != VK_SUCCESS) - goto fail; + goto out_mtx_destroy; vn_cs_renderer_protocol_info_init(instance); + vn_renderer_shmem_pool_init(instance->renderer, &instance->cs_shmem.pool, + 8u << 20); + vn_renderer_shmem_pool_init(instance->renderer, &instance->reply_shmem_pool, 1u << 20); result = vn_instance_init_ring(instance); if (result != VK_SUCCESS) - goto fail; + goto out_shmem_pool_fini; result = vn_instance_init_renderer_versions(instance); if (result != VK_SUCCESS) - goto fail; - - vn_renderer_shmem_pool_init(instance->renderer, &instance->cs_shmem.pool, - 8u << 20); + goto out_ring_fini; VkInstanceCreateInfo local_create_info = *pCreateInfo; local_create_info.ppEnabledExtensionNames = NULL; @@ -701,7 +701,7 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, result = vn_call_vkCreateInstance(instance, pCreateInfo, NULL, &instance_handle); if (result != VK_SUCCESS) - goto fail; + goto out_ring_fini; driParseOptionInfo(&instance->available_dri_options, vn_dri_options, ARRAY_SIZE(vn_dri_options)); @@ -726,18 +726,16 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, return VK_SUCCESS; -fail: - vn_renderer_shmem_pool_fini(instance->renderer, &instance->cs_shmem.pool); - - if (instance->ring.shmem) - vn_instance_fini_ring(instance); +out_ring_fini: + vn_instance_fini_ring(instance); +out_shmem_pool_fini: vn_renderer_shmem_pool_fini(instance->renderer, &instance->reply_shmem_pool); + vn_renderer_shmem_pool_fini(instance->renderer, &instance->cs_shmem.pool); + vn_renderer_destroy(instance->renderer, alloc); - if (instance->renderer) - vn_renderer_destroy(instance->renderer, alloc); - +out_mtx_destroy: mtx_destroy(&instance->physical_device.mutex); mtx_destroy(&instance->ring_idx_mutex); mtx_destroy(&instance->cs_shmem.mutex); @@ -771,14 +769,14 @@ vn_DestroyInstance(VkInstance _instance, vn_call_vkDestroyInstance(instance, _instance, NULL); - vn_renderer_shmem_pool_fini(instance->renderer, &instance->cs_shmem.pool); - mtx_destroy(&instance->cs_shmem.mutex); - vn_instance_fini_ring(instance); vn_renderer_shmem_pool_fini(instance->renderer, &instance->reply_shmem_pool); + vn_renderer_shmem_pool_fini(instance->renderer, &instance->cs_shmem.pool); + mtx_destroy(&instance->cs_shmem.mutex); + vn_renderer_destroy(instance->renderer, alloc); driDestroyOptionCache(&instance->dri_options); diff --git a/src/virtio/vulkan/vn_instance.h b/src/virtio/vulkan/vn_instance.h index 10e1cf0a95d..d59575dd8fd 100644 --- a/src/virtio/vulkan/vn_instance.h +++ b/src/virtio/vulkan/vn_instance.h @@ -40,6 +40,12 @@ struct vn_instance { struct vn_renderer *renderer; + /* for VN_CS_ENCODER_STORAGE_SHMEM_POOL */ + struct { + mtx_t mutex; + struct vn_renderer_shmem_pool pool; + } cs_shmem; + struct vn_renderer_shmem_pool reply_shmem_pool; mtx_t ring_idx_mutex; @@ -70,12 +76,6 @@ struct vn_instance { uint32_t renderer_api_version; uint32_t renderer_version; - /* for VN_CS_ENCODER_STORAGE_SHMEM_POOL */ - struct { - mtx_t mutex; - struct vn_renderer_shmem_pool pool; - } cs_shmem; - struct { mtx_t mutex; bool initialized;