[PATCH v1 4/5] drm/xe/migrate: Use order to calculate migration length

Matthew Brost matthew.brost at intel.com
Fri Jul 18 04:27:44 UTC 2025


On Thu, Jul 17, 2025 at 03:38:26PM +0200, Francois Dugast wrote:
> Since GPU SVM can DMA map folios, it can no longer be assumed that the
> order is always 0 and that the mapping size is always PAGE_SIZE. Instead,
> to determinate the migration length, use the order associated with each
> DMA mapping, provided by drm_pagemap_device_addr.
> 

Hmm, I think the interface should still define npages as the total
number of pages mapped, even if drm_pagemap_addr contains entries of
higher order. In the case of higher-order mappings, I’d expect
unpopulated entries based on the order of each individual entry.

So, I think we can drop this patch, but update kernel doc in similar way
I mentioned in the previous patches.

Matt

> Signed-off-by: Francois Dugast <francois.dugast at intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_migrate.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> index 33d67993f1f6..efbf8c0f41dc 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -1724,7 +1724,12 @@ struct dma_fence *xe_migrate_to_vram(struct xe_migrate *m,
>  				     struct drm_pagemap_device_addr *src_addr,
>  				     u64 dst_addr)
>  {
> -	return xe_migrate_vram(m, npages * PAGE_SIZE, 0, src_addr, dst_addr,
> +	unsigned long i, len = 0;
> +
> +	for (i = 0; i < npages; i++)
> +		len += PAGE_SIZE << src_addr[i].order;
> +
> +	return xe_migrate_vram(m, len, 0, src_addr, dst_addr,
>  			       XE_MIGRATE_COPY_TO_VRAM);
>  }
>  
> @@ -1745,7 +1750,12 @@ struct dma_fence *xe_migrate_from_vram(struct xe_migrate *m,
>  				       u64 src_addr,
>  				       struct drm_pagemap_device_addr *dst_addr)
>  {
> -	return xe_migrate_vram(m, npages * PAGE_SIZE, 0, dst_addr, src_addr,
> +	unsigned long i, len = 0;
> +
> +	for (i = 0; i < npages; i++)
> +		len += PAGE_SIZE << dst_addr[i].order;
> +
> +	return xe_migrate_vram(m, len, 0, dst_addr, src_addr,
>  			       XE_MIGRATE_COPY_TO_SRAM);
>  }
>  
> -- 
> 2.43.0
> 


More information about the Intel-xe mailing list