[PATCH i-g-t 3/7] lib/xe: Populate vram_size[] and visible_vram_size[] by GT ID

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Wed Jul 2 11:24:06 UTC 2025


On Mon, Jun 30, 2025 at 09:35:33AM -0700, Matt Roper wrote:
> vram_size[] and visible_vram_size[] are used to lookup VRAM information
> by uapi GT ID.  Ensure that they're populated according to these IDs
> rather than by the GT's index in the query list; on future platforms
> these two may not be the same.
> 
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
>  lib/xe/xe_query.c | 25 +++++++++++++++++--------
>  1 file changed, 17 insertions(+), 8 deletions(-)
> 
> diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
> index ef4034185..9bfad0cc2 100644
> --- a/lib/xe/xe_query.c
> +++ b/lib/xe/xe_query.c
> @@ -332,6 +332,7 @@ static void xe_device_free(struct xe_device *xe_dev)
>  struct xe_device *xe_device_get(int fd)
>  {
>  	struct xe_device *xe_dev, *prev;
> +	int max_gt;
>  
>  	xe_dev = find_in_cache(fd);
>  	if (xe_dev)
> @@ -355,14 +356,22 @@ struct xe_device *xe_device_get(int fd)
>  	xe_dev->engines = xe_query_engines(fd);
>  	xe_dev->mem_regions = xe_query_mem_regions_new(fd);
>  	xe_dev->oa_units = xe_query_oa_units_new(fd);
> -	xe_dev->vram_size = calloc(xe_dev->gt_list->num_gt, sizeof(*xe_dev->vram_size));
> -	xe_dev->visible_vram_size = calloc(xe_dev->gt_list->num_gt, sizeof(*xe_dev->visible_vram_size));
> -	for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
> -		xe_dev->vram_size[gt] = gt_vram_size(xe_dev->mem_regions,
> -						     &xe_dev->gt_list->gt_list[gt]);
> -		xe_dev->visible_vram_size[gt] =
> -			gt_visible_vram_size(xe_dev->mem_regions,
> -					     &xe_dev->gt_list->gt_list[gt]);
> +
> +	/*
> +	 * vram_size[] and visible_vram_size[] are indexed by uapi ID; ensure
> +	 * the allocation is large enough to hold the highest GT ID
> +	 */
> +	max_gt = ffs(xe_dev->gt_mask) - 1;

If I checked correctly, ffsl() is enough on 64bit arch, whereas on 32bit
we should use ffsll(). Rest looks good to me. With this fixed:

Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>

--
Zbigniew

> +	xe_dev->vram_size = calloc(max_gt, sizeof(*xe_dev->vram_size));
> +	xe_dev->visible_vram_size = calloc(max_gt, sizeof(*xe_dev->visible_vram_size));
> +
> +	for (int idx = 0; idx < xe_dev->gt_list->num_gt; idx++) {
> +		struct drm_xe_gt *gt = &xe_dev->gt_list->gt_list[idx];
> +
> +		xe_dev->vram_size[gt->gt_id] =
> +			gt_vram_size(xe_dev->mem_regions, gt);
> +		xe_dev->visible_vram_size[gt->gt_id] =
> +			gt_visible_vram_size(xe_dev->mem_regions, gt);
>  	}
>  	xe_dev->default_alignment = __mem_default_alignment(xe_dev->mem_regions);
>  	xe_dev->has_vram = __mem_has_vram(xe_dev->mem_regions);
> -- 
> 2.49.0
> 


More information about the igt-dev mailing list