[PATCH i-g-t 1/2] lib/xe: Track valid Tile IDs
Dandamudi, Priyanka
priyanka.dandamudi at intel.com
Wed Aug 6 10:22:18 UTC 2025
> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of
> nishit.sharma at intel.com
> Sent: 18 July 2025 11:19 AM
> To: igt-dev at lists.freedesktop.org; Brost, Matthew
> <matthew.brost at intel.com>; Sharma, Nishit <nishit.sharma at intel.com>
> Cc: Roper, Matthew D <matthew.d.roper at intel.com>
> Subject: [PATCH i-g-t 1/2] lib/xe: Track valid Tile IDs
>
> From: Nishit Sharma <nishit.sharma at intel.com>
>
> Iterating drm_xe_gt structure to get valid tile ID instead of assuming tile_id ==
> gt_id and finding sysfs path for GTS in multi-tile platforms. Initially it was
> assumed tile_id == gt_id in multi-tile platform and if gt_id = X passed, it was
> considered tileX.
>
> Signed-off-by: Nishit Sharma <nishit.sharma at intel.com>
> ---
> lib/igt_sysfs.c | 4 +++-
> lib/xe/xe_query.c | 12 ++++++++++++
> lib/xe/xe_query.h | 1 +
> 3 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c index aec157b5b..af80e91ee 100644
> --- a/lib/igt_sysfs.c
> +++ b/lib/igt_sysfs.c
> @@ -226,6 +226,8 @@ int igt_sysfs_open(int device) char
> *xe_sysfs_gt_path(int xe_device, int gt, char *path, int pathlen) {
> struct stat st;
> + struct xe_device *xe_dev = xe_device_get(xe_device);
> + igt_assert(xe_dev);
The above 2 lines can be moved under pontevechhio if condition as it is used on that condition.
>
> if (xe_device < 0)
> return NULL;
> @@ -235,7 +237,7 @@ char *xe_sysfs_gt_path(int xe_device, int gt, char
> *path, int pathlen)
>
> if (IS_PONTEVECCHIO(intel_get_drm_devid(xe_device)))
> snprintf(path, pathlen,
> "/sys/dev/char/%d:%d/device/tile%d/gt%d",
> - major(st.st_rdev), minor(st.st_rdev), gt, gt);
> + major(st.st_rdev), minor(st.st_rdev),
> drm_xe_get_tile(xe_dev, gt),
> +gt);
> else
> snprintf(path, pathlen,
> "/sys/dev/char/%d:%d/device/tile0/gt%d",
> major(st.st_rdev), minor(st.st_rdev), gt); diff --git
> a/lib/xe/xe_query.c b/lib/xe/xe_query.c index 3d628cb3f..70ce625d0 100644
> --- a/lib/xe/xe_query.c
> +++ b/lib/xe/xe_query.c
> @@ -517,6 +517,18 @@ const struct drm_xe_gt *drm_xe_get_gt(struct
> xe_device *xe_dev, int gt_id)
> return NULL;
> }
>
> +/*
> + * Given a uapi GT ID, lookup the corresponding drm_xe_gt structure in
> +the
> + * GT list and return valid tile_id.
> + */
> +uint32_t drm_xe_get_tile(struct xe_device *xe_dev, int gt_id) {
> + for (int i = 0; i < xe_dev->gt_list->num_gt; i++)
> + if (xe_dev->gt_list->gt_list[i].gt_id == gt_id)
> + return xe_dev->gt_list->gt_list[i].tile_id;
> +
> + return -1;
> +}
>
> /**
> * vram_memory:
> diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h index ca0b3235e..6ff8576b9
> 100644
> --- a/lib/xe/xe_query.h
> +++ b/lib/xe/xe_query.h
> @@ -98,6 +98,7 @@ unsigned int xe_dev_max_gt(int fd); uint64_t
> all_memory_regions(int fd); uint64_t system_memory(int fd); const struct
> drm_xe_gt *drm_xe_get_gt(struct xe_device *xe_dev, int gt_id);
> +uint32_t drm_xe_get_tile(struct xe_device *xe_dev, int gt_id);
> uint64_t vram_memory(int fd, int gt);
> uint64_t vram_if_possible(int fd, int gt); struct drm_xe_engine
> *xe_engines(int fd);
> --
> 2.43.0
More information about the igt-dev
mailing list