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