[PATCH v5 18/20] drm/xe/svm: Add xe_svm_range_find_or_insert_start()

Himal Prasad Ghimiray himal.prasad.ghimiray at intel.com
Tue Apr 29 10:42:31 UTC 2025


xe_svm_range_find_or_insert_start() is wrapper function
for drm_gpusvm_range_find_or_insert_start() in xe_svm.c

Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
---
 drivers/gpu/drm/xe/xe_svm.c | 24 ++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_svm.h |  8 ++++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index 55c5373b7989..8334733b49a6 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -674,6 +674,30 @@ bool xe_svm_range_validate_and_evict(struct xe_vm *vm,
 	return ret;
 }
 
+/**
+ * xe_svm_range_find_or_insert_start - Find an address for range find/allocate
+ * @vm: xe_vm pointer
+ * @start: start address
+ * @end: end address
+ * @vma: Pointer to struct xe_vma
+ *
+ *
+ * This function searches for a cpu vma, within the specified
+ * range [start, end] in the given VM. It adjusts the range based on the
+ * xe_vma start and end addresses. If no cpu VMA is found, it returns 0.
+ *
+ * Return: The starting address of the VMA within the range, or 0 if no VMA is found
+ */
+u64 xe_svm_range_find_or_insert_start(struct xe_vm *vm, u64 start, u64 end, struct xe_vma *vma)
+{
+	u64 ret;
+
+	ret =  drm_gpusvm_range_find_or_insert_start(&vm->svm.gpusvm,
+						     max(start, xe_vma_start(vma)),
+						     min(end, xe_vma_end(vma)));
+	return ret == ULONG_MAX ? 0 : ret;
+}
+
 #if IS_ENABLED(CONFIG_DRM_XE_DEVMEM_MIRROR)
 static struct xe_vram_region *tile_to_vr(struct xe_tile *tile)
 {
diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
index e6f71ad0b17b..b23b394d3fd5 100644
--- a/drivers/gpu/drm/xe/xe_svm.h
+++ b/drivers/gpu/drm/xe/xe_svm.h
@@ -87,6 +87,8 @@ bool xe_svm_range_validate_and_evict(struct xe_vm *vm,
 				     struct xe_svm_range *range,
 				     u8 tile_mask, bool devmem_only);
 
+u64 xe_svm_range_find_or_insert_start(struct xe_vm *vm, u64 addr, u64 end,  struct xe_vma *vma);
+
 /**
  * xe_svm_range_has_dma_mapping() - SVM range has DMA mapping
  * @range: SVM range
@@ -288,6 +290,12 @@ bool xe_svm_range_validate_and_evict(struct xe_vm *vm,
 	return false;
 }
 
+static inline
+u64 xe_svm_range_find_or_insert_start(struct xe_vm *vm, u64 addr, u64 end, struct xe_vma *vma)
+{
+	return 0;
+}
+
 #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