Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/xe: Misc refine for svm

These changes should have no functional impact.
1. Correct typo of "operation"in macro range_debug().
2. Combine 2 spin_lock() call in xe_svm_garbage_collector() into 1.
3. Drop redundant preferred_region_is_vram check in
xe_svm_range_needs_migrate_to_vram().
4. Combine the devmem_possible check in xe_svm_handle_pagefault().
need_vram includes the IS_DGFX() check, so there is no change for
.devmem_only.

v2: revert !ctx.devmem_only change (Matt)
v3: rebase code and refine commit message.
v4: rebase code and refine commit message.

Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20250911031405.1371812-2-shuicheng.lin@intel.com

authored by

Shuicheng Lin and committed by
Matt Roper
5959c4da 5bb5258e

+11 -14
+11 -14
drivers/gpu/drm/xe/xe_svm.c
··· 50 50 return gpusvm_to_vm(r->gpusvm); 51 51 } 52 52 53 - #define range_debug(r__, operaton__) \ 53 + #define range_debug(r__, operation__) \ 54 54 vm_dbg(&range_to_vm(&(r__)->base)->xe->drm, \ 55 55 "%s: asid=%u, gpusvm=%p, vram=%d,%d, seqno=%lu, " \ 56 56 "start=0x%014lx, end=0x%014lx, size=%lu", \ 57 - (operaton__), range_to_vm(&(r__)->base)->usm.asid, \ 57 + (operation__), range_to_vm(&(r__)->base)->usm.asid, \ 58 58 (r__)->base.gpusvm, \ 59 59 xe_svm_range_in_vram((r__)) ? 1 : 0, \ 60 60 xe_svm_range_has_vram_binding((r__)) ? 1 : 0, \ ··· 347 347 if (xe_vm_is_closed_or_banned(vm)) 348 348 return -ENOENT; 349 349 350 - spin_lock(&vm->svm.garbage_collector.lock); 351 350 for (;;) { 351 + spin_lock(&vm->svm.garbage_collector.lock); 352 352 range = list_first_entry_or_null(&vm->svm.garbage_collector.range_list, 353 353 typeof(*range), 354 354 garbage_collector_link); ··· 377 377 else 378 378 return err; 379 379 } 380 - 381 - spin_lock(&vm->svm.garbage_collector.lock); 382 380 } 383 381 spin_unlock(&vm->svm.garbage_collector.lock); 384 382 ··· 942 944 943 945 xe_assert(vm->xe, IS_DGFX(vm->xe)); 944 946 945 - if (preferred_region_is_vram && xe_svm_range_in_vram(range)) { 947 + if (xe_svm_range_in_vram(range)) { 946 948 drm_info(&vm->xe->drm, "Range is already in VRAM\n"); 947 949 return false; 948 950 } 949 951 950 - if (preferred_region_is_vram && range_size < SZ_64K && !supports_4K_migration(vm->xe)) { 952 + if (range_size < SZ_64K && !supports_4K_migration(vm->xe)) { 951 953 drm_dbg(&vm->xe->drm, "Platform doesn't support SZ_4K range migration\n"); 952 954 return false; 953 955 } ··· 1008 1010 struct xe_gt *gt, u64 fault_addr, 1009 1011 bool need_vram) 1010 1012 { 1013 + int devmem_possible = IS_DGFX(vm->xe) && 1014 + IS_ENABLED(CONFIG_DRM_XE_PAGEMAP); 1011 1015 struct drm_gpusvm_ctx ctx = { 1012 1016 .read_only = xe_vma_read_only(vma), 1013 - .devmem_possible = IS_DGFX(vm->xe) && 1014 - IS_ENABLED(CONFIG_DRM_XE_PAGEMAP), 1015 - .check_pages_threshold = IS_DGFX(vm->xe) && 1016 - IS_ENABLED(CONFIG_DRM_XE_PAGEMAP) ? SZ_64K : 0, 1017 - .devmem_only = need_vram && IS_ENABLED(CONFIG_DRM_XE_PAGEMAP), 1018 - .timeslice_ms = need_vram && IS_DGFX(vm->xe) && 1019 - IS_ENABLED(CONFIG_DRM_XE_PAGEMAP) ? 1017 + .devmem_possible = devmem_possible, 1018 + .check_pages_threshold = devmem_possible ? SZ_64K : 0, 1019 + .devmem_only = need_vram && devmem_possible, 1020 + .timeslice_ms = need_vram && devmem_possible ? 1020 1021 vm->xe->atomic_svm_timeslice_ms : 0, 1021 1022 }; 1022 1023 struct xe_validation_ctx vctx;