[PATCH v3 6/6] drm/xe/svm: Migrate folios when possible

Matthew Brost matthew.brost at intel.com
Tue Aug 5 03:19:53 UTC 2025


On Wed, Jul 30, 2025 at 04:22:51PM +0200, Francois Dugast wrote:
> The DMA mapping can now correspond to a folio (order > 0), so move
> the iterator by the number of pages in the folio in order to migrate
> all pages at once.
> 
> This requires forcing contiguous memory for SVM BOs, which greatly
> simplifies the code and enables 2MB device page support, allowing a
> major performance improvement. Negative effects like extra eviction
> are unlikely as SVM BOs have a maximal size of 2MB.
> 
> v2:
> - Improve commit message (Matthew Brost)
> - Fix increment, chunk, assert match (Matthew Brost)
> 
> Signed-off-by: Francois Dugast <francois.dugast at intel.com>

Reviewed-by: Matthew Brost <matthew.brost at intel.com>

> ---
>  drivers/gpu/drm/xe/xe_bo.c  | 2 ++
>  drivers/gpu/drm/xe/xe_svm.c | 8 ++++++++
>  2 files changed, 10 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index ffca1cea5585..59994a978a8c 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -200,6 +200,8 @@ static bool force_contiguous(u32 bo_flags)
>  	else if (bo_flags & XE_BO_FLAG_PINNED &&
>  		 !(bo_flags & XE_BO_FLAG_PINNED_LATE_RESTORE))
>  		return true; /* needs vmap */
> +	else if (bo_flags & XE_BO_FLAG_CPU_ADDR_MIRROR)
> +		return true;
>  
>  	/*
>  	 * For eviction / restore on suspend / resume objects pinned in VRAM
> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
> index 1d097e76aabc..e35c6d4def20 100644
> --- a/drivers/gpu/drm/xe/xe_svm.c
> +++ b/drivers/gpu/drm/xe/xe_svm.c
> @@ -383,6 +383,14 @@ static int xe_svm_copy(struct page **pages,
>  			}
>  
>  			match = vram_addr + PAGE_SIZE * (i - pos) == __vram_addr;
> +			/* Expected with contiguous memory */
> +			xe_assert(vr->xe, match);
> +
> +			if (pagemap_addr[i].order) {
> +				i += NR_PAGES(pagemap_addr[i].order) - 1;
> +				chunk = (i - pos) == (XE_MIGRATE_CHUNK_SIZE / PAGE_SIZE);
> +				last = (i + 1) == npages;
> +			}
>  		}
>  
>  		/*
> -- 
> 2.43.0
> 


More information about the Intel-xe mailing list