diff --git a/src/intel/dev/i915/intel_device_info.c b/src/intel/dev/i915/intel_device_info.c index 2fdfa05de0b..02b4dcbc3ce 100644 --- a/src/intel/dev/i915/intel_device_info.c +++ b/src/intel/dev/i915/intel_device_info.c @@ -336,9 +336,7 @@ intel_device_info_i915_query_regions(struct intel_device_info *devinfo, int fd, /* If the memory region uAPI query is not available, try to generate some * numbers out of os_* utils for sram only. */ - bool ret = intel_device_info_compute_system_memory(devinfo, false); - devinfo->mem.sram.mappable.size /= 2; - return ret; + return intel_device_info_compute_system_memory(devinfo, false); } for (int i = 0; i < meminfo->num_regions; i++) { @@ -348,14 +346,11 @@ intel_device_info_i915_query_regions(struct intel_device_info *devinfo, int fd, if (!update) { devinfo->mem.sram.mem.klass = mem->region.memory_class; devinfo->mem.sram.mem.instance = mem->region.memory_instance; - /* i915 reports the whole RAM as SRAM size but Xe KMD only reports - * half, so adjusting i915 to follow Xe KMD. - */ - devinfo->mem.sram.mappable.size = mem->probed_size / 2; + devinfo->mem.sram.mappable.size = mem->probed_size; } else { assert(devinfo->mem.sram.mem.klass == mem->region.memory_class); assert(devinfo->mem.sram.mem.instance == mem->region.memory_instance); - assert(devinfo->mem.sram.mappable.size == mem->probed_size / 2); + assert(devinfo->mem.sram.mappable.size == mem->probed_size); } /* if running without elevated privileges i915 reports * unallocated_size == probed_size diff --git a/src/intel/vulkan/anv_physical_device.c b/src/intel/vulkan/anv_physical_device.c index e0d9f7f9a36..9ef82c90be2 100644 --- a/src/intel/vulkan/anv_physical_device.c +++ b/src/intel/vulkan/anv_physical_device.c @@ -1955,13 +1955,36 @@ get_properties(const struct anv_physical_device *pdevice, } } +/* This function restricts the maximum size of system memory heap. The + * reasoning is that if we allow all the RAM to be used by graphics, nothing + * will remain for the rest of the system. + * + * In practice, applications should really be using VK_EXT_memory_budget + * instead of relying on our heuristics. + * + * The i915.ko driver has always reported 100% of the total available RAM. + * The xe.ko driver changed its behavior after commit d2d5f6d57884 ("drm/xe: + * Increase the XE_PL_TT watermark"), so we need to detect that and make a + * choice based on it. + */ +static uint64_t +anv_restrict_sys_heap_size(struct anv_physical_device *device, + uint64_t kmd_reported_sram) +{ + if (device->info.kmd_type == INTEL_KMD_TYPE_XE) + return kmd_reported_sram; + + return kmd_reported_sram / 2; +} + static VkResult MUST_CHECK anv_init_meminfo(struct anv_physical_device *device, int fd) { const struct intel_device_info *devinfo = &device->info; device->sys.region = &devinfo->mem.sram.mem; - device->sys.size = devinfo->mem.sram.mappable.size; + device->sys.size = + anv_restrict_sys_heap_size(device, devinfo->mem.sram.mappable.size); device->sys.available = devinfo->mem.sram.mappable.free; device->vram_mappable.region = &devinfo->mem.vram.mem;