]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Use drm_gpusvm_scan_mm()
authorThomas Hellström <thomas.hellstrom@linux.intel.com>
Fri, 19 Dec 2025 11:33:17 +0000 (12:33 +0100)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Tue, 23 Dec 2025 09:00:48 +0000 (10:00 +0100)
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
drivers/gpu/drm/xe/xe_svm.c

index 3ec32f9805e3fd647c0d3fabacf043a3deb32eab..ed4afb386ba2619e25168cd5f1e9482e2a0f2093 100644 (file)
@@ -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);