summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancisco Jerez <currojerez@riseup.net>2017-08-18 11:00:42 -0700
committerFrancisco Jerez <currojerez@riseup.net>2017-08-22 11:54:16 -0700
commit7ca124a6a3987fbfc09bc530761d44714c0da773 (patch)
treef94cc9f883ae1c21fca3498bf49808104206201a
parent4d807d7fe272db97fb9e20800872d5970fa2696d (diff)
anv: Add error handling to setup_empty_execbuf().
The anv_execbuf_add_bo() call can actually fail in practice, which should cause the QueueSubmit operation to fail. Reported by Coverity. CID: 1416606: Unchecked return value (CHECKED_RETURN) Fixes: 017cdb10cf (anv: Submit a dummy batch when only semaphores are provided.) Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
-rw-r--r--src/intel/vulkan/anv_batch_chain.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c
index 0078cc5142..26b5375903 100644
--- a/src/intel/vulkan/anv_batch_chain.c
+++ b/src/intel/vulkan/anv_batch_chain.c
@@ -1424,11 +1424,13 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
return VK_SUCCESS;
}
-static void
+static VkResult
setup_empty_execbuf(struct anv_execbuf *execbuf, struct anv_device *device)
{
- anv_execbuf_add_bo(execbuf, &device->trivial_batch_bo, NULL, 0,
- &device->alloc);
+ VkResult result = anv_execbuf_add_bo(execbuf, &device->trivial_batch_bo,
+ NULL, 0, &device->alloc);
+ if (result != VK_SUCCESS)
+ return result;
execbuf->execbuf = (struct drm_i915_gem_execbuffer2) {
.buffers_ptr = (uintptr_t) execbuf->objects,
@@ -1439,6 +1441,8 @@ setup_empty_execbuf(struct anv_execbuf *execbuf, struct anv_device *device)
.rsvd1 = device->context_id,
.rsvd2 = 0,
};
+
+ return VK_SUCCESS;
}
VkResult
@@ -1541,13 +1545,13 @@ anv_cmd_buffer_execbuf(struct anv_device *device,
}
}
- if (cmd_buffer) {
+ if (cmd_buffer)
result = setup_execbuf_for_cmd_buffer(&execbuf, cmd_buffer);
- if (result != VK_SUCCESS)
- return result;
- } else {
- setup_empty_execbuf(&execbuf, device);
- }
+ else
+ result = setup_empty_execbuf(&execbuf, device);
+
+ if (result != VK_SUCCESS)
+ return result;
if (execbuf.fence_count > 0) {
assert(device->instance->physicalDevice.has_syncobj);