[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