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; }