From a983e8dcbf3b790c037fce92e4e63e0d2c5a9c25 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Wed, 24 Apr 2024 22:31:04 +0000 Subject: [PATCH] venus: avoid client allocators for ring internals There're many cases in which the ring submissions must succeed. We don't worry about real oom since things would fail earlier. For simulated oom from random intentional allocs, there isn't robust way to fail those must succeeds. e.g. the commands that don't have return codes or valid error return struct defaults. So real oom propagation is still at best effort. Cc: mesa-stable Signed-off-by: Yiwei Zhang Part-of: (cherry picked from commit 3e16d25d1a2f217aa0e6e9b8e7eec9f974e38e0b) --- .pick_status.json | 2 +- src/virtio/vulkan/vn_ring.c | 25 +++++++++---------------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 9b1e97ebb3a..c7c9f5c3883 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1594,7 +1594,7 @@ "description": "venus: avoid client allocators for ring internals", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/virtio/vulkan/vn_ring.c b/src/virtio/vulkan/vn_ring.c index 085a24f1551..39c16acbeaa 100644 --- a/src/virtio/vulkan/vn_ring.c +++ b/src/virtio/vulkan/vn_ring.c @@ -343,7 +343,7 @@ vn_ring_destroy(struct vn_ring *ring) list_for_each_entry_safe(struct vn_ring_submit, submit, &ring->free_submits, head) - vk_free(alloc, submit); + free(submit); vn_cs_encoder_fini(&ring->upload); vn_renderer_shmem_unref(ring->instance->renderer, ring->shmem); @@ -362,7 +362,6 @@ vn_ring_get_id(struct vn_ring *ring) static struct vn_ring_submit * vn_ring_get_submit(struct vn_ring *ring, uint32_t shmem_count) { - const VkAllocationCallbacks *alloc = &ring->instance->base.base.alloc; const uint32_t min_shmem_count = 2; struct vn_ring_submit *submit; @@ -375,8 +374,7 @@ vn_ring_get_submit(struct vn_ring *ring, uint32_t shmem_count) } else { const size_t submit_size = offsetof( struct vn_ring_submit, shmems[MAX2(shmem_count, min_shmem_count)]); - submit = vk_alloc(alloc, submit_size, VN_DEFAULT_ALIGN, - VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + submit = malloc(submit_size); } return submit; @@ -419,8 +417,7 @@ vn_ring_submit_internal(struct vn_ring *ring, } static const struct vn_cs_encoder * -vn_ring_submission_get_cs(struct vn_ring *ring, - struct vn_ring_submission *submit, +vn_ring_submission_get_cs(struct vn_ring_submission *submit, const struct vn_cs_encoder *cs, bool direct) { @@ -445,9 +442,7 @@ vn_ring_submission_get_cs(struct vn_ring *ring, desc_count, descs, NULL, 0, NULL, 0); void *exec_data = submit->indirect.data; if (exec_size > sizeof(submit->indirect.data)) { - const VkAllocationCallbacks *alloc = &ring->instance->base.base.alloc; - exec_data = vk_alloc(alloc, exec_size, VN_DEFAULT_ALIGN, - VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + exec_data = malloc(exec_size); if (!exec_data) { STACK_ARRAY_FINISH(descs); return NULL; @@ -495,13 +490,11 @@ vn_ring_submission_get_ring_submit(struct vn_ring *ring, } static inline void -vn_ring_submission_cleanup(struct vn_ring *ring, - struct vn_ring_submission *submit) +vn_ring_submission_cleanup(struct vn_ring_submission *submit) { - const VkAllocationCallbacks *alloc = &ring->instance->base.base.alloc; if (submit->cs == &submit->indirect.cs && submit->indirect.buffer.base != submit->indirect.data) - vk_free(alloc, submit->indirect.buffer.base); + free(submit->indirect.buffer.base); } static VkResult @@ -511,14 +504,14 @@ vn_ring_submission_prepare(struct vn_ring *ring, struct vn_renderer_shmem *extra_shmem, bool direct) { - submit->cs = vn_ring_submission_get_cs(ring, submit, cs, direct); + submit->cs = vn_ring_submission_get_cs(submit, cs, direct); if (!submit->cs) return VK_ERROR_OUT_OF_HOST_MEMORY; submit->submit = vn_ring_submission_get_ring_submit(ring, cs, extra_shmem, direct); if (!submit->submit) { - vn_ring_submission_cleanup(ring, submit); + vn_ring_submission_cleanup(submit); return VK_ERROR_OUT_OF_HOST_MEMORY; } @@ -586,7 +579,7 @@ vn_ring_submit_locked(struct vn_ring *ring, vn_cs_encoder_get_len(&local_enc)); } - vn_ring_submission_cleanup(ring, &submit); + vn_ring_submission_cleanup(&submit); if (ring_seqno) *ring_seqno = seqno;