[Intel-xe] [PATCH v2 34/50] drm/xe/uapi: Move memory_region masks from GT to engine

Souza, Jose jose.souza at intel.com
Thu Nov 9 16:29:31 UTC 2023


On Fri, 2023-11-03 at 14:34 +0000, Francois Dugast wrote:
> From: Rodrigo Vivi <rodrigo.vivi at intel.com>
> 
> In the Tiled platforms, the memory is more tied to the Tile
> than to the GT.
> The distance (near vs far) makes more sense from the Engine
> perspective than from the GT perspective.

why not add a uAPI to query tile information?
this is duplicating a tile information onto every engine of that tile.
we could leave reserved fields in the tile uAPI to include additional information that might be relevant in future.

> 
> So, let's move this out from the GT and into the engine info.
> 
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_query.c | 14 +++++++-------
>  include/uapi/drm/xe_drm.h     | 27 ++++++++++++++-------------
>  2 files changed, 21 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index aa5743e2e4d0..49a9b36f1193 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -217,6 +217,13 @@ static int query_engines(struct xe_device *xe,
>  				hwe->logical_instance;
>  			hw_engine_info[i].instance.gt_id = gt->info.id;
>  			hw_engine_info[i].instance.pad = 0;
> +			if (!IS_DGFX(xe))
> +				hw_engine_info[i].near_mem_regions = 0x1;
> +			else
> +				hw_engine_info[i].near_mem_regions =
> +					BIT(gt_to_tile(gt)->id) << 1;
> +			hw_engine_info[i].far_mem_regions = xe->info.mem_region_mask ^
> +				hw_engine_info[i].near_mem_regions;
>  			memset(hw_engine_info->reserved, 0, sizeof(hw_engine_info->reserved));
>  
>  			i++;
> @@ -377,13 +384,6 @@ static int query_gt_list(struct xe_device *xe, struct drm_xe_device_query *query
>  			gt_list->gt_list[id].type = DRM_XE_QUERY_GT_TYPE_MAIN;
>  		gt_list->gt_list[id].gt_id = gt->info.id;
>  		gt_list->gt_list[id].clock_freq = gt->info.clock_freq;
> -		if (!IS_DGFX(xe))
> -			gt_list->gt_list[id].near_mem_regions = 0x1;
> -		else
> -			gt_list->gt_list[id].near_mem_regions =
> -				BIT(gt_to_tile(gt)->id) << 1;
> -		gt_list->gt_list[id].far_mem_regions = xe->info.mem_region_mask ^
> -			gt_list->gt_list[id].near_mem_regions;
>  	}
>  
>  	if (copy_to_user(query_ptr, gt_list, size)) {
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 5164ed150a2e..8e84ef6fd46e 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -228,6 +228,20 @@ struct drm_xe_query_engine_info {
>  	/** @instance: The @drm_xe_engine_class_instance */
>  	struct drm_xe_engine_class_instance instance;
>  
> +	/**
> +	 * @near_mem_regions: Bit mask of instances from
> +	 * drm_xe_query_mem_regions that is near this engine.
> +	 */
> +	__u64 near_mem_regions;
> +	/**
> +	 * @far_mem_regions: Bit mask of instances from
> +	 * drm_xe_query_mem_regions that is far from this engine.
> +	 * In general, it has extra indirections when compared to the
> +	 * @near_mem_regions. For a discrete device this could mean system
> +	 * memory and memory living in a different Tile.
> +	 */
> +	__u64 far_mem_regions;
> +
>  	/** @reserved: Reserved */
>  	__u64 reserved[3];
>  };
> @@ -401,19 +415,6 @@ struct drm_xe_query_gt {
>  	__u16 gt_id;
>  	/** @clock_freq: A clock frequency for timestamp */
>  	__u32 clock_freq;
> -	/**
> -	 * @near_mem_regions: Bit mask of instances from
> -	 * drm_xe_query_mem_regions that is near the current engines of this GT.
> -	 */
> -	__u64 near_mem_regions;
> -	/**
> -	 * @far_mem_regions: Bit mask of instances from
> -	 * drm_xe_query_mem_regions that is far from the engines of this GT.
> -	 * In general, it has extra indirections when compared to the
> -	 * @near_mem_regions. For a discrete device this could mean system
> -	 * memory and memory living in a different Tile.
> -	 */
> -	__u64 far_mem_regions;
>  	/** @reserved: Reserved */
>  	__u64 reserved[8];
>  };



More information about the Intel-xe mailing list