[PATCH v4 15/18] drm/xe/svm: Make xe_svm_range_needs_migrate_to_vram() public

Matthew Brost matthew.brost at intel.com
Mon Apr 28 21:13:13 UTC 2025


On Mon, Apr 28, 2025 at 04:02:21PM +0530, Himal Prasad Ghimiray wrote:
> xe_svm_range_needs_migrate_to_vram() determines whether range needs
> migration to vram or not, modify it to accept region preference parameter
> too, so we can use it in prefetch too.
> 
> v2
> - add assert instead of warn (Matthew Brost)
> 
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_svm.c | 26 ++++++++++++++++++--------
>  drivers/gpu/drm/xe/xe_svm.h | 10 ++++++++++
>  2 files changed, 28 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
> index 72263df1d69d..90fae13b77ae 100644
> --- a/drivers/gpu/drm/xe/xe_svm.c
> +++ b/drivers/gpu/drm/xe/xe_svm.c
> @@ -719,22 +719,32 @@ static bool supports_4K_migration(struct xe_device *xe)
>  	return true;
>  }
>  
> -static bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range,
> -					       struct xe_vma *vma)
> +/**
> + * xe_svm_range_needs_migrate_to_vram() - SVM range needs migrate to VRAM or not
> + * @range: SVM range for which migration needs to be decided
> + * @vma: vma which has range
> + * @preferred_region_is_vram: preferred region for range is vram
> + *
> + * Return: True for range needing migration and migration is supported else false
> + */

I think this will need to refactored for multi-GPU but looks good for now.

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

> +bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range, struct xe_vma *vma,
> +					bool preferred_region_is_vram)
>  {
>  	struct xe_vm *vm = range_to_vm(&range->base);
>  	u64 range_size = xe_svm_range_size(range);
>  
> -	if (!range->base.flags.migrate_devmem)
> +	if (!range->base.flags.migrate_devmem || !preferred_region_is_vram)
>  		return false;
>  
> -	if (xe_svm_range_in_vram(range)) {
> -		drm_dbg(&vm->xe->drm, "Range is already in VRAM\n");
> +	xe_assert(vm->xe, IS_DGFX(vm->xe));
> +
> +	if (preferred_region_is_vram && xe_svm_range_in_vram(range)) {
> +		drm_info(&vm->xe->drm, "Range is already in VRAM\n");
>  		return false;
>  	}
>  
> -	if (range_size <= SZ_64K && !supports_4K_migration(vm->xe)) {
> -		drm_dbg(&vm->xe->drm, "Platform doesn't support SZ_4K range migration\n");
> +	if (preferred_region_is_vram && range_size <= SZ_64K && !supports_4K_migration(vm->xe)) {
> +		drm_warn(&vm->xe->drm, "Platform doesn't support SZ_4K range migration\n");
>  		return false;
>  	}
>  
> @@ -800,7 +810,7 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>  	range_debug(range, "PAGE FAULT");
>  
>  	if (--migrate_try_count >= 0 &&
> -	    xe_svm_range_needs_migrate_to_vram(range, vma)) {
> +	    xe_svm_range_needs_migrate_to_vram(range, vma, IS_DGFX(vm->xe))) {
>  		err = xe_svm_alloc_vram(vm, tile, range, &ctx);
>  		ctx.timeslice_ms <<= 1;	/* Double timeslice if we have to retry */
>  		if (err) {
> diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
> index cafca625bba9..9be7bb25725c 100644
> --- a/drivers/gpu/drm/xe/xe_svm.h
> +++ b/drivers/gpu/drm/xe/xe_svm.h
> @@ -80,6 +80,9 @@ struct xe_svm_range *xe_svm_range_find_or_insert(struct xe_vm *vm, u64 addr,
>  int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range,
>  			   struct drm_gpusvm_ctx *ctx);
>  
> +bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range, struct xe_vma *vma,
> +					bool preferred_region_is_vram);
> +
>  /**
>   * xe_svm_range_has_dma_mapping() - SVM range has DMA mapping
>   * @range: SVM range
> @@ -266,6 +269,13 @@ static inline unsigned long xe_svm_range_size(struct xe_svm_range *range)
>  	return 0;
>  }
>  
> +static inline
> +bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range, struct xe_vma *vma,
> +					u32 region)
> +{
> +	return false;
> +}
> +
>  #define xe_svm_assert_in_notifier(...) do {} while (0)
>  #define xe_svm_range_has_dma_mapping(...) false
>  
> -- 
> 2.34.1
> 


More information about the Intel-xe mailing list