Mesa (main): intel/dev: add a helper to update memory info

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 22 01:14:11 UTC 2022


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

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Wed Jun 15 10:28:07 2022 +0300

intel/dev: add a helper to update memory info

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17075>

---

 src/intel/dev/intel_device_info.c | 33 +++++++++++++++++++++++++--------
 src/intel/dev/intel_device_info.h |  6 ++++++
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/src/intel/dev/intel_device_info.c b/src/intel/dev/intel_device_info.c
index 9a2f6b8ff72..287be41e96c 100644
--- a/src/intel/dev/intel_device_info.c
+++ b/src/intel/dev/intel_device_info.c
@@ -1592,7 +1592,7 @@ query_topology(struct intel_device_info *devinfo, int fd)
  * and/or device local memory.
  */
 static bool
-query_regions(struct intel_device_info *devinfo, int fd)
+query_regions(struct intel_device_info *devinfo, int fd, bool update)
 {
    struct drm_i915_query_memory_regions *meminfo =
       intel_i915_query_alloc(fd, DRM_I915_QUERY_MEMORY_REGIONS, NULL);
@@ -1603,16 +1603,28 @@ query_regions(struct intel_device_info *devinfo, int fd)
       const struct drm_i915_memory_region_info *mem = &meminfo->regions[i];
       switch (mem->region.memory_class) {
       case I915_MEMORY_CLASS_SYSTEM:
-         devinfo->mem.sram.mem_class = mem->region.memory_class;
-         devinfo->mem.sram.mem_instance = mem->region.memory_instance;
-         devinfo->mem.sram.mappable.size = mem->probed_size;
+         if (!update) {
+            devinfo->mem.sram.mem_class = mem->region.memory_class;
+            devinfo->mem.sram.mem_instance = mem->region.memory_instance;
+            devinfo->mem.sram.mappable.size = mem->probed_size;
+         } else {
+            assert(devinfo->mem.sram.mem_class == mem->region.memory_class);
+            assert(devinfo->mem.sram.mem_instance == mem->region.memory_instance);
+            assert(devinfo->mem.sram.mappable.size == mem->probed_size);
+         }
          if (mem->unallocated_size != -1)
             devinfo->mem.sram.mappable.free = mem->unallocated_size;
          break;
       case I915_MEMORY_CLASS_DEVICE:
-         devinfo->mem.vram.mem_class = mem->region.memory_class;
-         devinfo->mem.vram.mem_instance = mem->region.memory_instance;
-         devinfo->mem.vram.mappable.size = mem->probed_size;
+         if (!update) {
+            devinfo->mem.vram.mem_class = mem->region.memory_class;
+            devinfo->mem.vram.mem_instance = mem->region.memory_instance;
+            devinfo->mem.vram.mappable.size = mem->probed_size;
+         } else {
+            assert(devinfo->mem.vram.mem_class == mem->region.memory_class);
+            assert(devinfo->mem.vram.mem_instance == mem->region.memory_instance);
+            assert(devinfo->mem.vram.mappable.size == mem->probed_size);
+         }
          if (mem->unallocated_size != -1)
             devinfo->mem.vram.mappable.free = mem->unallocated_size;
          break;
@@ -1970,7 +1982,7 @@ intel_get_device_info_from_fd(int fd, struct intel_device_info *devinfo)
       getparam_topology(devinfo, fd);
    }
 
-   query_regions(devinfo, fd);
+   query_regions(devinfo, fd, false);
 
    /* region info is required for lmem support */
    if (devinfo->has_local_mem && !devinfo->mem.use_class_instance) {
@@ -2006,3 +2018,8 @@ intel_get_device_info_from_fd(int fd, struct intel_device_info *devinfo)
 
    return true;
 }
+
+bool intel_device_info_update_memory_info(struct intel_device_info *devinfo, int fd)
+{
+   return query_regions(devinfo, fd, true);
+}
diff --git a/src/intel/dev/intel_device_info.h b/src/intel/dev/intel_device_info.h
index cdea46cf2bf..379bb451adb 100644
--- a/src/intel/dev/intel_device_info.h
+++ b/src/intel/dev/intel_device_info.h
@@ -494,6 +494,12 @@ bool intel_get_device_info_from_fd(int fh, struct intel_device_info *devinfo);
 bool intel_get_device_info_from_pci_id(int pci_id,
                                        struct intel_device_info *devinfo);
 
+/* Only updates intel_device_info::regions::...::free fields. The
+ * class/instance/size should remain the same over time.
+ */
+bool intel_device_info_update_memory_info(struct intel_device_info *devinfo,
+                                          int fd);
+
 #ifdef __cplusplus
 }
 #endif



More information about the mesa-commit mailing list