summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorThomas Hellström <thomas.hellstrom@linux.intel.com>2025-12-19 12:33:17 +0100
committerThomas Hellström <thomas.hellstrom@linux.intel.com>2025-12-23 10:00:48 +0100
commit0471ed20df6b92133a183d526d8f28592dbf0831 (patch)
treeb2f9fb20d714e47674d25cc20ee555a459d10ae4 /drivers/gpu
parentf1d08a5864822684773105c60528e2abb577ca6c (diff)
drm/xe: Use drm_gpusvm_scan_mm()
Use drm_gpusvm_scan_mm() to avoid unnecessarily calling into drm_pagemap_populate_mm(); v3: - New patch. Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Link: https://patch.msgid.link/20251219113320.183860-22-thomas.hellstrom@linux.intel.com
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/xe/xe_svm.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index 3ec32f9805e3..ed4afb386ba2 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -1590,11 +1590,23 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *t
int xe_svm_alloc_vram(struct xe_svm_range *range, const struct drm_gpusvm_ctx *ctx,
struct drm_pagemap *dpagemap)
{
- struct xe_device *xe = range_to_vm(&range->base)->xe;
+ struct xe_vm *vm = range_to_vm(&range->base);
+ enum drm_gpusvm_scan_result migration_state;
+ struct xe_device *xe = vm->xe;
xe_assert(range_to_vm(&range->base)->xe, range->base.pages.flags.migrate_devmem);
range_debug(range, "ALLOCATE VRAM");
+ migration_state = drm_gpusvm_scan_mm(&range->base,
+ xe_svm_private_page_owner(vm, false),
+ dpagemap->pagemap);
+
+ if (migration_state == DRM_GPUSVM_SCAN_EQUAL) {
+ if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM))
+ drm_dbg(dpagemap->drm, "Already migrated!\n");
+ return 0;
+ }
+
if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM))
drm_dbg(&xe->drm, "Request migration to device memory on \"%s\".\n",
dpagemap->drm->unique);