mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
anv: fix incorrect realloc failure handling
We don't want to leak in case of failure. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reported-by: Ivan Briano <ivan.briano@intel.com> Fixes:246261f0ad("anv: prepare the driver for delayed submissions") Fixes:34f32a6d66("anv: implement VK_KHR_timeline_semaphore") Reviewed-by: Ivan Briano <ivan.briano@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6200> (cherry picked from commitb43bcb05a1)
This commit is contained in:
parent
bcf1a7a87d
commit
2c898a8f3f
2 changed files with 23 additions and 17 deletions
|
|
@ -4162,7 +4162,7 @@
|
|||
"description": "anv: fix incorrect realloc failure handling",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "246261f0addfc24f69ae412b9ef7e40e2c667a4a"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -402,14 +402,14 @@ anv_queue_submit_add_fence_bo(struct anv_queue_submit *submit,
|
|||
{
|
||||
if (submit->fence_bo_count >= submit->fence_bo_array_length) {
|
||||
uint32_t new_len = MAX2(submit->fence_bo_array_length * 2, 64);
|
||||
|
||||
submit->fence_bos =
|
||||
uintptr_t *new_fence_bos =
|
||||
vk_realloc(submit->alloc,
|
||||
submit->fence_bos, new_len * sizeof(*submit->fence_bos),
|
||||
8, submit->alloc_scope);
|
||||
if (submit->fence_bos == NULL)
|
||||
if (new_fence_bos == NULL)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
submit->fence_bos = new_fence_bos;
|
||||
submit->fence_bo_array_length = new_len;
|
||||
}
|
||||
|
||||
|
|
@ -430,14 +430,14 @@ anv_queue_submit_add_syncobj(struct anv_queue_submit* submit,
|
|||
|
||||
if (submit->fence_count >= submit->fence_array_length) {
|
||||
uint32_t new_len = MAX2(submit->fence_array_length * 2, 64);
|
||||
|
||||
submit->fences =
|
||||
struct drm_i915_gem_exec_fence *new_fences =
|
||||
vk_realloc(submit->alloc,
|
||||
submit->fences, new_len * sizeof(*submit->fences),
|
||||
8, submit->alloc_scope);
|
||||
if (submit->fences == NULL)
|
||||
if (new_fences == NULL)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
submit->fences = new_fences;
|
||||
submit->fence_array_length = new_len;
|
||||
}
|
||||
|
||||
|
|
@ -480,21 +480,24 @@ anv_queue_submit_add_timeline_wait(struct anv_queue_submit* submit,
|
|||
{
|
||||
if (submit->wait_timeline_count >= submit->wait_timeline_array_length) {
|
||||
uint32_t new_len = MAX2(submit->wait_timeline_array_length * 2, 64);
|
||||
|
||||
submit->wait_timelines =
|
||||
struct anv_timeline **new_wait_timelines =
|
||||
vk_realloc(submit->alloc,
|
||||
submit->wait_timelines, new_len * sizeof(*submit->wait_timelines),
|
||||
8, submit->alloc_scope);
|
||||
if (submit->wait_timelines == NULL)
|
||||
if (new_wait_timelines == NULL)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
submit->wait_timeline_values =
|
||||
submit->wait_timelines = new_wait_timelines;
|
||||
|
||||
uint64_t *new_wait_timeline_values =
|
||||
vk_realloc(submit->alloc,
|
||||
submit->wait_timeline_values, new_len * sizeof(*submit->wait_timeline_values),
|
||||
8, submit->alloc_scope);
|
||||
if (submit->wait_timeline_values == NULL)
|
||||
if (new_wait_timeline_values == NULL)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
submit->wait_timeline_values = new_wait_timeline_values;
|
||||
|
||||
submit->wait_timeline_array_length = new_len;
|
||||
}
|
||||
|
||||
|
|
@ -516,21 +519,24 @@ anv_queue_submit_add_timeline_signal(struct anv_queue_submit* submit,
|
|||
|
||||
if (submit->signal_timeline_count >= submit->signal_timeline_array_length) {
|
||||
uint32_t new_len = MAX2(submit->signal_timeline_array_length * 2, 64);
|
||||
|
||||
submit->signal_timelines =
|
||||
struct anv_timeline **new_signal_timelines =
|
||||
vk_realloc(submit->alloc,
|
||||
submit->signal_timelines, new_len * sizeof(*submit->signal_timelines),
|
||||
8, submit->alloc_scope);
|
||||
if (submit->signal_timelines == NULL)
|
||||
if (new_signal_timelines == NULL)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
submit->signal_timeline_values =
|
||||
submit->signal_timelines = new_signal_timelines;
|
||||
|
||||
uint64_t *new_signal_timeline_values =
|
||||
vk_realloc(submit->alloc,
|
||||
submit->signal_timeline_values, new_len * sizeof(*submit->signal_timeline_values),
|
||||
8, submit->alloc_scope);
|
||||
if (submit->signal_timeline_values == NULL)
|
||||
if (new_signal_timeline_values == NULL)
|
||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
submit->signal_timeline_values = new_signal_timeline_values;
|
||||
|
||||
submit->signal_timeline_array_length = new_len;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue