[PATCH] drm/xe/pf: Don't show GGTT/LMEM debugfs files under media GT

Bernatowicz, Marcin marcin.bernatowicz at linux.intel.com
Mon Apr 14 09:13:33 UTC 2025



On 4/11/2025 9:30 PM, Michal Wajdeczko wrote:
> Most of the PF's debugfs files (and their implementations) are
> based on the GT hierarchy even if files are related to GGTT or
> LMEM data, that are related to the tile.
> 
> While we could reach the tile data from any GT, to avoid potential
> misuse, some functions allow to be used on the primary GT only,
> and may use asserts to enforce that.
> 
> In our case, the following assert could be seen when reading the
> /sys/kernel/debug/dri/0000:00:02.0/gt1/pf/ggtt_available
> 
>   [ ] xe 0000:00:02.0: [drm] Assertion `!xe_gt_is_media_type(gt)` failed!
>   [ ] WARNING: CPU: 4 PID: 10609 at drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c:379 pf_get_spare_ggtt+0x256/0x4e0 [xe]
>   [ ] RIP: 0010:pf_get_spare_ggtt+0x256/0x4e0 [xe]
>   [ ] Call Trace:
>   [ ]  <TASK>
>   [ ]  xe_gt_sriov_pf_config_print_available_ggtt+0xb7/0x480 [xe]
>   [ ]  ? __memcg_slab_post_alloc_hook+0x12f/0x3f0
>   [ ]  xe_gt_debugfs_simple_show+0x7b/0xb0 [xe]
>   [ ]  ? __pfx___drm_printfn_seq_file+0x10/0x10
>   [ ]  ? __pfx___drm_puts_seq_file+0x10/0x10
>   [ ]  seq_read_iter+0x139/0x4e0
>   [ ]  seq_read+0x11d/0x160
>   [ ]  full_proxy_read+0x6b/0xb0
>   [ ]  vfs_read+0xfa/0x390
> 
> Fix that by moving GGTT/LMEM debugfs attributes to separate lists
> and register them only when applicable (on primary GT, on DGFX).
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> ---
>   drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c | 66 +++++++++++++++------
>   1 file changed, 49 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c
> index b2521dd6ec42..0fe47f41b63c 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_debugfs.c
> @@ -51,26 +51,17 @@ static unsigned int extract_vfid(struct dentry *d)
>    *      /sys/kernel/debug/dri/0/
>    *      ├── gt0
>    *      │   ├── pf
> - *      │   │   ├── ggtt_available
> - *      │   │   ├── ggtt_provisioned
>    *      │   │   ├── contexts_provisioned
>    *      │   │   ├── doorbells_provisioned
>    *      │   │   ├── runtime_registers
>    *      │   │   ├── negotiated_versions
>    *      │   │   ├── adverse_events
> + *      ├── gt1
> + *      │   ├── pf
> + *      │   │   ├── ...
>    */
>   
>   static const struct drm_info_list pf_info[] = {
> -	{
> -		"ggtt_available",
> -		.show = xe_gt_debugfs_simple_show,
> -		.data = xe_gt_sriov_pf_config_print_available_ggtt,
> -	},
> -	{
> -		"ggtt_provisioned",
> -		.show = xe_gt_debugfs_simple_show,
> -		.data = xe_gt_sriov_pf_config_print_ggtt,
> -	},
>   	{
>   		"contexts_provisioned",
>   		.show = xe_gt_debugfs_simple_show,
> @@ -81,11 +72,6 @@ static const struct drm_info_list pf_info[] = {
>   		.show = xe_gt_debugfs_simple_show,
>   		.data = xe_gt_sriov_pf_config_print_dbs,
>   	},
> -	{
> -		"lmem_provisioned",
> -		.show = xe_gt_debugfs_simple_show,
> -		.data = xe_gt_sriov_pf_config_print_lmem,
> -	},
>   	{
>   		"runtime_registers",
>   		.show = xe_gt_debugfs_simple_show,
> @@ -103,6 +89,42 @@ static const struct drm_info_list pf_info[] = {
>   	},
>   };
>   
> +/*
> + *      /sys/kernel/debug/dri/0/
> + *      ├── gt0
> + *      │   ├── pf
> + *      │   │   ├── ggtt_available
> + *      │   │   ├── ggtt_provisioned
> + */
> +
> +static const struct drm_info_list pf_ggtt_info[] = {
> +	{
> +		"ggtt_available",
> +		.show = xe_gt_debugfs_simple_show,
> +		.data = xe_gt_sriov_pf_config_print_available_ggtt,
> +	},
> +	{
> +		"ggtt_provisioned",
> +		.show = xe_gt_debugfs_simple_show,
> +		.data = xe_gt_sriov_pf_config_print_ggtt,
> +	},
> +};
> +
> +/*
> + *      /sys/kernel/debug/dri/0/
> + *      ├── gt0
> + *      │   ├── pf
> + *      │   │   ├── lmem_provisioned
> + */
> +
> +static const struct drm_info_list pf_lmem_info[] = {
> +	{
> +		"lmem_provisioned",
> +		.show = xe_gt_debugfs_simple_show,
> +		.data = xe_gt_sriov_pf_config_print_lmem,
> +	},
> +};
> +
>   /*
>    *      /sys/kernel/debug/dri/0/
>    *      ├── gt0
> @@ -532,6 +554,16 @@ void xe_gt_sriov_pf_debugfs_register(struct xe_gt *gt, struct dentry *root)
>   	pfdentry->d_inode->i_private = gt;
>   
>   	drm_debugfs_create_files(pf_info, ARRAY_SIZE(pf_info), pfdentry, minor);
> +	if (!xe_gt_is_media_type(gt)) {
> +		drm_debugfs_create_files(pf_ggtt_info,
> +					 ARRAY_SIZE(pf_ggtt_info),
> +					 pfdentry, minor);
> +		if (IS_DGFX(gt_to_xe(gt)))
> +			drm_debugfs_create_files(pf_lmem_info,
> +						 ARRAY_SIZE(pf_lmem_info),
> +						 pfdentry, minor);
> +	}
> +
>   	pf_add_policy_attrs(gt, pfdentry);
>   	pf_add_config_attrs(gt, pfdentry, PFID);
>   
LGTM,
Tested with igt at intel_sysfs_debugfs@xe-debugfs-read-all-entries.

Tested-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>



More information about the Intel-xe mailing list