[Intel-xe] [PATCH v1 5/8] drm/xe/uapi: Align on a common way to return arrays (memory regions)
Souza, Jose
jose.souza at intel.com
Thu Nov 16 20:39:16 UTC 2023
On Thu, 2023-11-16 at 14:43 +0000, Francois Dugast wrote:
> The uAPI provides queries which return arrays of elements. As of now
> the format used in the struct is different depending on which element
> is queried. Fix this for memory regions by applying the pattern below:
>
> struct drm_xe_query_X {
> __u32 num_X;
> struct drm_xe_X Xs[];
> ...
> }
>
> This removes "query" in the name of struct drm_xe_query_mem_region
> as it is not returned from the query IOCTL. There is no functional
> change.
>
> Signed-off-by: Francois Dugast <francois.dugast at intel.com>
> ---
> drivers/gpu/drm/xe/xe_query.c | 44 ++++++++++++++++++-----------------
> include/uapi/drm/xe_drm.h | 22 +++++++++---------
> 2 files changed, 34 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 0cbfeaeb1330..b31e00bd29bc 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -240,15 +240,15 @@ static size_t calc_mem_regions_size(struct xe_device *xe)
> if (ttm_manager_type(&xe->ttm, i))
> num_managers++;
>
> - return offsetof(struct drm_xe_query_mem_regions, regions[num_managers]);
> + return offsetof(struct drm_xe_query_mem_region, mem_regions[num_managers]);
> }
>
> -static int query_mem_regions(struct xe_device *xe,
> - struct drm_xe_device_query *query)
> +static int query_mem_region(struct xe_device *xe,
> + struct drm_xe_device_query *query)
> {
> size_t size = calc_mem_regions_size(xe);
> - struct drm_xe_query_mem_regions *usage;
> - struct drm_xe_query_mem_regions __user *query_ptr =
> + struct drm_xe_query_mem_region *usage;
> + struct drm_xe_query_mem_region __user *query_ptr =
> u64_to_user_ptr(query->data);
> struct ttm_resource_manager *man;
> int ret, i;
> @@ -265,36 +265,38 @@ static int query_mem_regions(struct xe_device *xe,
> return -ENOMEM;
>
> man = ttm_manager_type(&xe->ttm, XE_PL_TT);
> - usage->regions[0].mem_class = DRM_XE_MEM_REGION_CLASS_SYSMEM;
> - usage->regions[0].instance = 0;
> - usage->regions[0].min_page_size = PAGE_SIZE;
> - usage->regions[0].total_size = man->size << PAGE_SHIFT;
> + usage->mem_regions[0].mem_class = DRM_XE_MEM_REGION_CLASS_SYSMEM;
> + usage->mem_regions[0].instance = 0;
> + usage->mem_regions[0].min_page_size = PAGE_SIZE;
> + usage->mem_regions[0].total_size = man->size << PAGE_SHIFT;
> if (perfmon_capable())
> - usage->regions[0].used = ttm_resource_manager_usage(man);
> - usage->num_regions = 1;
> + usage->mem_regions[0].used = ttm_resource_manager_usage(man);
> + usage->num_mem_regions = 1;
>
> for (i = XE_PL_VRAM0; i <= XE_PL_VRAM1; ++i) {
> man = ttm_manager_type(&xe->ttm, i);
> if (man) {
> - usage->regions[usage->num_regions].mem_class =
> + usage->mem_regions[usage->num_mem_regions].mem_class =
> DRM_XE_MEM_REGION_CLASS_VRAM;
> - usage->regions[usage->num_regions].instance =
> - usage->num_regions;
> - usage->regions[usage->num_regions].min_page_size =
> + usage->mem_regions[usage->num_mem_regions].instance =
> + usage->num_mem_regions;
> + usage->mem_regions[usage->num_mem_regions].min_page_size =
> xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K ?
> SZ_64K : PAGE_SIZE;
> - usage->regions[usage->num_regions].total_size =
> + usage->mem_regions[usage->num_mem_regions].total_size =
> man->size;
>
> if (perfmon_capable()) {
> xe_ttm_vram_get_used(man,
> - &usage->regions[usage->num_regions].used,
> - &usage->regions[usage->num_regions].cpu_visible_used);
> + &usage->mem_regions
> + [usage->num_mem_regions].used,
> + &usage->mem_regions
> + [usage->num_mem_regions].cpu_visible_used);
> }
>
> - usage->regions[usage->num_regions].cpu_visible_size =
> + usage->mem_regions[usage->num_mem_regions].cpu_visible_size =
> xe_ttm_vram_get_cpu_visible_size(man);
> - usage->num_regions++;
> + usage->num_mem_regions++;
> }
> }
>
> @@ -500,7 +502,7 @@ static int query_gt_topology(struct xe_device *xe,
> static int (* const xe_query_funcs[])(struct xe_device *xe,
> struct drm_xe_device_query *query) = {
> query_engines,
> - query_mem_regions,
> + query_mem_region,
> query_config,
> query_gt_list,
> query_hwconfig,
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index e02bef8dc229..f54e545cc4fb 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -182,10 +182,10 @@ enum drm_xe_memory_class {
> };
>
> /**
> - * struct drm_xe_query_mem_region - Describes some region as known to
> + * struct drm_xe_mem_region - Describes some region as known to
> * the driver.
> */
> -struct drm_xe_query_mem_region {
> +struct drm_xe_mem_region {
> /**
> * @mem_class: The memory class describing this region.
> *
> @@ -315,19 +315,19 @@ struct drm_xe_query_engine_cycles {
> };
>
> /**
> - * struct drm_xe_query_mem_regions - describe memory regions
> + * struct drm_xe_query_mem_region - describe memory regions
> *
> * If a query is made with a struct drm_xe_device_query where .query
> - * is equal to DRM_XE_DEVICE_QUERY_MEM_REGIONS, then the reply uses
> - * struct drm_xe_query_mem_regions in .data.
> + * is equal to DRM_XE_DEVICE_QUERY_MEM_REGION, then the reply uses
> + * struct drm_xe_query_mem_region in .data.
> */
> -struct drm_xe_query_mem_regions {
> - /** @num_regions: number of memory regions returned in @regions */
> - __u32 num_regions;
> +struct drm_xe_query_mem_region {
ack on s/drm_xe_query_mem_region/drm_xe_mem_region but not on s/drm_xe_query_mem_regions/drm_xe_query_mem_region, the second one can return more than
one region.
> + /** @num_mem_regions: number of memory regions returned in @mem_regions */
> + __u32 num_mem_regions;
> /** @pad: MBZ */
> __u32 pad;
> - /** @regions: The returned regions for this device */
> - struct drm_xe_query_mem_region regions[];
> + /** @mem_regions: The returned memory regions for this device */
> + struct drm_xe_mem_region mem_regions[];
> };
>
> /**
> @@ -493,7 +493,7 @@ struct drm_xe_device_query {
> __u64 extensions;
>
> #define DRM_XE_DEVICE_QUERY_ENGINES 0
> -#define DRM_XE_DEVICE_QUERY_MEM_REGIONS 1
> +#define DRM_XE_DEVICE_QUERY_MEM_REGION 1
> #define DRM_XE_DEVICE_QUERY_CONFIG 2
> #define DRM_XE_DEVICE_QUERY_GT_LIST 3
> #define DRM_XE_DEVICE_QUERY_HWCONFIG 4
More information about the Intel-xe
mailing list