anv: run buf_finish() if add_bo() fails during execute_simple_batch()
This is the only code path where we don't run anv_execbuf_finish() in case anv_execbuf_add_bo() fails. While there is not a bug in the current tree, I recently made an (uncommitted) modification that started leaking memory and made me realize the lack of cleanup here. If we had anv_execbuf_finish() being called upon error like we're going to have after this patch my modification wouldn't have caused the memory leak. I think it's much safer and future-proof if we're able to operate under the assumption that whatever is allocated and set to anv_execbuf will be dealt with upon failure of anything else related to it, so functions that fail should only be required to free pointers not yet assigned to anv_execbuf. The dEQP-VK 'alloc_callback_fail' tests should exercise this code path. The one I was specifically using here is: dEQP-VK.api.object_management.alloc_callback_fail.device_group v2: Rebase. Reviewed-by: Ivan Briano <ivan.briano@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20703>
This commit is contained in:
@@ -770,7 +770,7 @@ anv_i915_execute_simple_batch(struct anv_queue *queue,
|
||||
|
||||
VkResult result = anv_execbuf_add_bo(device, &execbuf, batch_bo, NULL, 0);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
goto fail;
|
||||
|
||||
execbuf.execbuf = (struct drm_i915_gem_execbuffer2) {
|
||||
.buffers_ptr = (uintptr_t) execbuf.objects,
|
||||
|
Reference in New Issue
Block a user