On Thu, Dec 11, 2025 at 05:59:07PM +0100, Thomas Hellström wrote: > Use drm_gpusvm_scan_mm() to avoid unnecessarily calling into > drm_pagemap_populate_mm(); > > v3: > - New patch. > > Signed-off-by: Thomas Hellström <[email protected]> > --- > drivers/gpu/drm/xe/xe_svm.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c > index 2fa73143fcd5..22281d69e26a 100644 > --- a/drivers/gpu/drm/xe/xe_svm.c > +++ b/drivers/gpu/drm/xe/xe_svm.c > @@ -1625,11 +1625,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;
LGTM, but I suggest adding something like CONFIG_DRM_XE_DEBUG_VM to the SVM code in a follow-up. We get spammed a ton just running xe_exec_system_allocator, with a reasonable DRM printk debug value. IMO, it’s best to hide most of the debug in this function behind a Kconfig. CONFIG_DRM_XE_DEBUG_VM would also select the SVM level debug. Anyways: Reviewed-by: Matthew Brost <[email protected]> > + } > + > if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM)) > drm_dbg(&xe->drm, "Request migration to device memory on > \"%s\".\n", > dpagemap->drm->unique); > -- > 2.51.1 >
