[PATCH v2 02/32] drm/xe: Make xe_svm_alloc_vram public

Ghimiray, Himal Prasad himal.prasad.ghimiray at intel.com
Mon Apr 21 04:06:30 UTC 2025



On 17-04-2025 08:20, Matthew Brost wrote:
> On Mon, Apr 07, 2025 at 03:46:49PM +0530, Himal Prasad Ghimiray wrote:
>> This function will be used in prefetch too, hence make it public.
>>
>> v2:
>>    - Add kernel-doc (Matthew Brost)
>>    - Rebase
>>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
>> ---
>>   drivers/gpu/drm/xe/xe_svm.c | 23 +++++++++++++----------
>>   drivers/gpu/drm/xe/xe_svm.h | 23 +++++++++++++++++++++++
>>   2 files changed, 36 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
>> index c7424c824a14..de19ad056287 100644
>> --- a/drivers/gpu/drm/xe/xe_svm.c
>> +++ b/drivers/gpu/drm/xe/xe_svm.c
>> @@ -661,9 +661,19 @@ static struct xe_vram_region *tile_to_vr(struct xe_tile *tile)
>>   	return &tile->mem.vram;
>>   }
>>   
>> -static int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>> -			     struct xe_svm_range *range,
>> -			     const struct drm_gpusvm_ctx *ctx)
>> +/**
>> + * xe_svm_alloc_vram()- Allocate device memory pages for range,
>> + * migrating existing data.
>> + * @vm: The VM.
>> + * @tile: tile to allocate vram from
>> + * @range: SVM range
>> + * @ctx: DRM GPU SVM context
>> + *
>> + * Return: 0 on success, error code on failure.
>> + */
>> +int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>> +		      struct xe_svm_range *range,
>> +		      const struct drm_gpusvm_ctx *ctx)
>>   {
>>   	struct mm_struct *mm = vm->svm.gpusvm.mm;
>>   	struct xe_vram_region *vr = tile_to_vr(tile);
>> @@ -717,13 +727,6 @@ static int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>>   
>>   	return err;
>>   }
>> -#else
>> -static int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>> -			     struct xe_svm_range *range,
>> -			     const struct drm_gpusvm_ctx *ctx)
>> -{
>> -	return -EOPNOTSUPP;
>> -}
>>   #endif
>>   
>>   
>> diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
>> index 3d441eb1f7ea..d8772f841ab7 100644
>> --- a/drivers/gpu/drm/xe/xe_svm.h
>> +++ b/drivers/gpu/drm/xe/xe_svm.h
>> @@ -75,6 +75,20 @@ int xe_svm_bo_evict(struct xe_bo *bo);
>>   
>>   void xe_svm_range_debug(struct xe_svm_range *range, const char *operation);
>>   
>> +#if IS_ENABLED(CONFIG_DRM_XE_DEVMEM_MIRROR)
>> +int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>> +		      struct xe_svm_range *range,
>> +		      const struct drm_gpusvm_ctx *ctx);
>> +#else
>> +static inline
>> +int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>> +		      struct xe_svm_range *range,
>> +		      const struct drm_gpusvm_ctx *ctx)
>> +{
>> +	return -EOPNOTSUPP;
>> +}
>> +#endif
>> +
>>   /**
>>    * xe_svm_range_has_dma_mapping() - SVM range has DMA mapping
>>    * @range: SVM range
>> @@ -100,6 +114,7 @@ static inline bool xe_svm_range_has_dma_mapping(struct xe_svm_range *range)
>>   #include <linux/interval_tree.h>
>>   
>>   struct drm_pagemap_device_addr;
>> +struct drm_gpusvm_ctx;
>>   struct xe_bo;
>>   struct xe_gt;
>>   struct xe_vm;
>> @@ -170,6 +185,14 @@ void xe_svm_range_debug(struct xe_svm_range *range, const char *operation)
>>   {
>>   }
>>   
>> +static inline
>> +int xe_svm_alloc_vram(struct xe_vm *vm, struct xe_tile *tile,
>> +		      struct xe_svm_range *range,
>> +		      const struct drm_gpusvm_ctx *ctx)
>> +{
>> +	return -EOPNOTSUPP;
>> +}
>> +
> 
> It is a little goofy to have 2 versions of xe_svm_alloc_vram stubbed
> out in a single file. How about...
> 
> #if IS_ENABLED(CONFIG_DRM_GPUSVM) && IS_ENABLED(CONFIG_DRM_XE_DEVMEM_MIRROR)
> prototyope
> #else
> stub
> #endif
> 
> Or another option is in xe_svm.c we stub out xe_devm_add behind
> CONFIG_DRM_XE_DEVMEM_MIRROR so maybe stick xe_svm_alloc_vram there?

would go ahead with this.

> 
> Or lastly, I don't think anything in xe_svm_alloc_vram actually depends
> on CONFIG_DRM_XE_DEVMEM_MIRROR either as static version is not hidden
> behind CONFIG_DRM_XE_DEVMEM_MIRROR.
> 
> Matt
> 
>>   #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