From bbeb420157ee256230b4fa9db2c63abbcb528370 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 7 Jul 2021 14:21:58 -0500 Subject: [PATCH] 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 Part-of: (cherry picked from commit b664481ba91603d69b294ca5b1243e42c86a5863) --- .pick_status.json | 2 +- src/intel/vulkan/anv_gem.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 3a08b30c158..b361b128c03 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -184,7 +184,7 @@ "description": "anv: Handle errors properly in anv_i915_query", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c0d07c838a9fcd67e4ae8cf948ced2daa3edf8c6" }, 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; }