From 5be2d785ae2e839b6f692b7b349d69874de9fa6f Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 7 Jul 2021 14:36:38 -0500 Subject: [PATCH] iris: Use intel_i915_query for meminfo Error handling with DRM_IOCTL_I915_QUERY is tricky and we got it wrong in one of the two calls here. Use the common helper instead. This also fixes a theoretical bug where calloc() fails. While we're here, inline iris_bufmgr_update_meminfo because we're not really benefiting from having it separate anymore. Fixes: e60114b2ae11 "iris/bufmgr: Query memory region info." Reviewed-by: Paulo Zanoni Part-of: (cherry picked from commit 3fa6b8d0417f215a859386c9c41aca3cd4ec201e) --- .pick_status.json | 2 +- src/gallium/drivers/iris/iris_bufmgr.c | 37 +++++--------------------- 2 files changed, 8 insertions(+), 31 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index f04d9b8abce..46e6889d316 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -157,7 +157,7 @@ "description": "iris: Use intel_i915_query for meminfo", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "e60114b2ae117b0f9cc55de57ab397804c8d6bf8" }, diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index c33def32d2a..1f773b62e5d 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -1674,10 +1674,14 @@ gem_param(int fd, int name) return v; } -static void -iris_bufmgr_update_meminfo(struct iris_bufmgr *bufmgr, - const struct drm_i915_query_memory_regions *meminfo) +static bool +iris_bufmgr_query_meminfo(struct iris_bufmgr *bufmgr) { + struct drm_i915_query_memory_regions *meminfo = + intel_i915_query_alloc(bufmgr->fd, DRM_I915_QUERY_MEMORY_REGIONS); + if (meminfo == NULL) + return false; + for (int i = 0; i < meminfo->num_regions; i++) { const struct drm_i915_memory_region_info *mem = &meminfo->regions[i]; switch (mem->region.memory_class) { @@ -1692,35 +1696,8 @@ iris_bufmgr_update_meminfo(struct iris_bufmgr *bufmgr, default: break; } - }; -} - -static bool -iris_bufmgr_query_meminfo(struct iris_bufmgr *bufmgr) -{ - struct drm_i915_query_item item = { - .query_id = DRM_I915_QUERY_MEMORY_REGIONS, - }; - - struct drm_i915_query query = { - .num_items = 1, - .items_ptr = (uintptr_t) &item, - }; - - if (drmIoctl(bufmgr->fd, DRM_IOCTL_I915_QUERY, &query)) - return false; - - struct drm_i915_query_memory_regions *meminfo = calloc(1, item.length); - item.data_ptr = (uintptr_t)meminfo; - - if (drmIoctl(bufmgr->fd, DRM_IOCTL_I915_QUERY, &query) || - item.length <= 0) { - free(meminfo); - return false; } - iris_bufmgr_update_meminfo(bufmgr, meminfo); - free(meminfo); return true;