[Intel-xe] [PATCH v2 05/14] drm/xe/uapi: Align on a common way to return arrays (memory regions)

Souza, Jose jose.souza at intel.com
Fri Nov 24 18:19:47 UTC 2023


On Wed, 2023-11-22 at 14:38 +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_Xs {
>        __u32 num_Xs;
>        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.
> 
> v2: Only rename drm_xe_query_mem_region to drm_xe_mem_region
>     (José Roberto de Souza)
> 
> Signed-off-by: Francois Dugast <francois.dugast at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_query.c | 36 ++++++++++++++++++-----------------
>  include/uapi/drm/xe_drm.h     | 12 ++++++------
>  2 files changed, 25 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 0cbfeaeb1330..f321ed4d3b0b 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -240,11 +240,11 @@ 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_regions, mem_regions[num_managers]);
>  }
>  
>  static int query_mem_regions(struct xe_device *xe,
> -			     struct drm_xe_device_query *query)
> +			    struct drm_xe_device_query *query)
>  {
>  	size_t size = calc_mem_regions_size(xe);
>  	struct drm_xe_query_mem_regions *usage;
> @@ -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;

nit: can you also rename 'usage' to something else, it was named 'usage' because of the old query name.


> +	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++;
>  		}
>  	}
>  
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index da10d946930b..a9bbdf141fe2 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.
>  	 *
> @@ -322,12 +322,12 @@ struct drm_xe_query_engine_cycles {
>   * struct drm_xe_query_mem_regions in .data.
>   */
>  struct drm_xe_query_mem_regions {
> -	/** @num_regions: number of memory regions returned in @regions */
> -	__u32 num_regions;
> +	/** @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[];
>  };
>  
>  /**



More information about the Intel-xe mailing list