Mesa (main): anv: Handle errors properly in anv_i915_query
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jul 16 14:29:49 UTC 2021
Module: Mesa
Branch: main
Commit: b664481ba91603d69b294ca5b1243e42c86a5863
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b664481ba91603d69b294ca5b1243e42c86a5863
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Wed Jul 7 14:21:58 2021 -0500
anv: Handle errors properly in anv_i915_query
DRM_IOCTL_I915_QUERY is a multi-query. The most egregious errors are
returned via the usual ioctl error mechanism but there are also
per-query errors that are indicated by item.length < 0. We need to
handle those as well. While we're at it, scrape errno so we can return
a proper integer error.
Fixes: c0d07c838a9f "anv: Support i915 query (DRM_IOCTL_I915_QUERY)..."
Reviewed-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11770>
---
src/intel/vulkan/anv_gem.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/intel/vulkan/anv_gem.c b/src/intel/vulkan/anv_gem.c
index 2d4b207bf0f..55f8534d0ea 100644
--- a/src/intel/vulkan/anv_gem.c
+++ b/src/intel/vulkan/anv_gem.c
@@ -787,8 +787,13 @@ anv_i915_query(int fd, uint64_t query_id, void *buffer,
};
int ret = intel_ioctl(fd, DRM_IOCTL_I915_QUERY, &args);
+ if (ret != 0)
+ return -errno;
+ else if (item.length < 0)
+ return item.length;
+
*buffer_len = item.length;
- return ret;
+ return 0;
}
struct drm_i915_query_engine_info *
@@ -796,14 +801,14 @@ anv_gem_get_engine_info(int fd)
{
int32_t length = 0;
int ret = anv_i915_query(fd, DRM_I915_QUERY_ENGINE_INFO, NULL, &length);
- if (ret == -1)
+ if (ret < 0)
return NULL;
struct drm_i915_query_engine_info *info = calloc(1, length);
ret = anv_i915_query(fd, DRM_I915_QUERY_ENGINE_INFO, info, &length);
assert(ret == 0);
- if (ret != 0) {
+ if (ret < 0) {
free(info);
return NULL;
}
More information about the mesa-commit
mailing list