drm/xe/uapi: restrict system wide accounting

Since this is considered an info leak (system wide accounting), rather
hide behind perfmon_capable().

v2:
  - Without perfmon_capable() it likely makes more sense to report as zero,
    instead of reporting as used == total size. This should give similar
    behaviour as i915 which rather tracks free instead of used.

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Filip Hazubski <filip.hazubski@intel.com>
Cc: Carl Zhang <carl.zhang@intel.com>
Cc: Effie Yu <effie.yu@intel.com>
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
Matthew Auld 2023-03-31 09:46:24 +01:00 committed by Rodrigo Vivi
parent 1bc56a934f
commit 1105ac15d2

View File

@ -128,6 +128,7 @@ static int query_memory_usage(struct xe_device *xe,
usage->regions[0].min_page_size = PAGE_SIZE; usage->regions[0].min_page_size = PAGE_SIZE;
usage->regions[0].max_page_size = PAGE_SIZE; usage->regions[0].max_page_size = PAGE_SIZE;
usage->regions[0].total_size = man->size << PAGE_SHIFT; usage->regions[0].total_size = man->size << PAGE_SHIFT;
if (perfmon_capable())
usage->regions[0].used = ttm_resource_manager_usage(man); usage->regions[0].used = ttm_resource_manager_usage(man);
usage->num_regions = 1; usage->num_regions = 1;
@ -145,9 +146,14 @@ static int query_memory_usage(struct xe_device *xe,
SZ_1G; SZ_1G;
usage->regions[usage->num_regions].total_size = usage->regions[usage->num_regions].total_size =
man->size; man->size;
usage->regions[usage->num_regions++].used =
if (perfmon_capable()) {
usage->regions[usage->num_regions].used =
ttm_resource_manager_usage(man); ttm_resource_manager_usage(man);
} }
usage->num_regions++;
}
} }
if (!copy_to_user(query_ptr, usage, size)) if (!copy_to_user(query_ptr, usage, size))