From 09ba5c2b4334a09d06105f57de0387c7c4fe15ed Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 22 Jun 2022 10:51:13 +0300 Subject: [PATCH] intel/dev: deal with i915 unallocated_size on smem We cannot rely on unallocated_size on system memory for VK_EXT_memory_budget. Signed-off-by: Lionel Landwerlin Fixes: 4aecfbf0f4ab ("intel/dev: Add devinfo::mem to store i915 regions information") Reviewed-by: Jordan Justen Reviewed-by: Kenneth Graunke Part-of: --- src/intel/dev/intel_device_info.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/intel/dev/intel_device_info.c b/src/intel/dev/intel_device_info.c index f97b111..f91dd76 100644 --- a/src/intel/dev/intel_device_info.c +++ b/src/intel/dev/intel_device_info.c @@ -1603,7 +1603,7 @@ query_regions(struct intel_device_info *devinfo, int fd, bool update) 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: + case I915_MEMORY_CLASS_SYSTEM: { if (!update) { devinfo->mem.sram.mem_class = mem->region.memory_class; devinfo->mem.sram.mem_instance = mem->region.memory_instance; @@ -1613,9 +1613,14 @@ query_regions(struct intel_device_info *devinfo, int fd, bool update) 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; + /* The kernel uAPI only reports an accurate unallocated_size value + * for I915_MEMORY_CLASS_DEVICE. + */ + uint64_t available; + if (os_get_available_system_memory(&available)) + devinfo->mem.sram.mappable.free = MIN2(available, mem->probed_size); break; + } case I915_MEMORY_CLASS_DEVICE: if (!update) { devinfo->mem.vram.mem_class = mem->region.memory_class; -- 2.7.4