Mesa (main): iris/bufmgr: Query memory region info.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 24 16:52:04 UTC 2021


Module: Mesa
Branch: main
Commit: e60114b2ae117b0f9cc55de57ab397804c8d6bf8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e60114b2ae117b0f9cc55de57ab397804c8d6bf8

Author: Rafael Antognolli <rafael.antognolli at intel.com>
Date:   Thu Jun  6 10:37:02 2019 -0700

iris/bufmgr: Query memory region info.

v2 (Jason Ekstrand):
 - Don't leak meminfo if the ioctl fails on the second pass

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5599>

---

 src/gallium/drivers/iris/iris_bufmgr.c | 59 ++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c
index c71ef24e4e6..889000c8d64 100644
--- a/src/gallium/drivers/iris/iris_bufmgr.c
+++ b/src/gallium/drivers/iris/iris_bufmgr.c
@@ -158,6 +158,11 @@ struct bo_export {
    struct list_head link;
 };
 
+struct iris_memregion {
+   struct drm_i915_gem_memory_class_instance region;
+   uint64_t size;
+};
+
 struct iris_bufmgr {
    /**
     * List into the list of bufmgr.
@@ -187,6 +192,7 @@ struct iris_bufmgr {
    struct util_vma_heap vma_allocator[IRIS_MEMZONE_COUNT];
 
    uint64_t vma_min_align;
+   struct iris_memregion vram, sys;
 
    bool has_llc:1;
    bool has_mmap_offset:1;
@@ -1578,6 +1584,58 @@ 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)
+{
+   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) {
+      case I915_MEMORY_CLASS_SYSTEM:
+         bufmgr->sys.region = mem->region;
+         bufmgr->sys.size = mem->probed_size;
+         break;
+      case I915_MEMORY_CLASS_DEVICE:
+         bufmgr->vram.region = mem->region;
+         bufmgr->vram.size = mem->probed_size;
+         break;
+      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;
+}
+
 /**
  * Initializes the GEM buffer manager, which uses the kernel to allocate, map,
  * and manage map buffer objections.
@@ -1620,6 +1678,7 @@ iris_bufmgr_create(struct intel_device_info *devinfo, int fd, bool bo_reuse)
    bufmgr->has_tiling_uapi = devinfo->has_tiling_uapi;
    bufmgr->bo_reuse = bo_reuse;
    bufmgr->has_mmap_offset = gem_param(fd, I915_PARAM_MMAP_GTT_VERSION) >= 4;
+   iris_bufmgr_query_meminfo(bufmgr);
 
    STATIC_ASSERT(IRIS_MEMZONE_SHADER_START == 0ull);
    const uint64_t _4GB = 1ull << 32;



More information about the mesa-commit mailing list