Skip to content

Commit 5959c4d

Browse files
ShuichengLinmattrope
authored andcommitted
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
1 parent 5bb5258 commit 5959c4d

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

drivers/gpu/drm/xe/xe_svm.c

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ static struct xe_vm *range_to_vm(struct drm_gpusvm_range *r)
5050
return gpusvm_to_vm(r->gpusvm);
5151
}
5252

53-
#define range_debug(r__, operaton__) \
53+
#define range_debug(r__, operation__) \
5454
vm_dbg(&range_to_vm(&(r__)->base)->xe->drm, \
5555
"%s: asid=%u, gpusvm=%p, vram=%d,%d, seqno=%lu, " \
5656
"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, \
5858
(r__)->base.gpusvm, \
5959
xe_svm_range_in_vram((r__)) ? 1 : 0, \
6060
xe_svm_range_has_vram_binding((r__)) ? 1 : 0, \
@@ -347,8 +347,8 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
347347
if (xe_vm_is_closed_or_banned(vm))
348348
return -ENOENT;
349349

350-
spin_lock(&vm->svm.garbage_collector.lock);
351350
for (;;) {
351+
spin_lock(&vm->svm.garbage_collector.lock);
352352
range = list_first_entry_or_null(&vm->svm.garbage_collector.range_list,
353353
typeof(*range),
354354
garbage_collector_link);
@@ -377,8 +377,6 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
377377
else
378378
return err;
379379
}
380-
381-
spin_lock(&vm->svm.garbage_collector.lock);
382380
}
383381
spin_unlock(&vm->svm.garbage_collector.lock);
384382

@@ -944,12 +942,12 @@ bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range, struct xe_vm
944942

945943
xe_assert(vm->xe, IS_DGFX(vm->xe));
946944

947-
if (preferred_region_is_vram && xe_svm_range_in_vram(range)) {
945+
if (xe_svm_range_in_vram(range)) {
948946
drm_info(&vm->xe->drm, "Range is already in VRAM\n");
949947
return false;
950948
}
951949

952-
if (preferred_region_is_vram && range_size < SZ_64K && !supports_4K_migration(vm->xe)) {
950+
if (range_size < SZ_64K && !supports_4K_migration(vm->xe)) {
953951
drm_dbg(&vm->xe->drm, "Platform doesn't support SZ_4K range migration\n");
954952
return false;
955953
}
@@ -1010,15 +1008,14 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
10101008
struct xe_gt *gt, u64 fault_addr,
10111009
bool need_vram)
10121010
{
1011+
int devmem_possible = IS_DGFX(vm->xe) &&
1012+
IS_ENABLED(CONFIG_DRM_XE_PAGEMAP);
10131013
struct drm_gpusvm_ctx ctx = {
10141014
.read_only = xe_vma_read_only(vma),
1015-
.devmem_possible = IS_DGFX(vm->xe) &&
1016-
IS_ENABLED(CONFIG_DRM_XE_PAGEMAP),
1017-
.check_pages_threshold = IS_DGFX(vm->xe) &&
1018-
IS_ENABLED(CONFIG_DRM_XE_PAGEMAP) ? SZ_64K : 0,
1019-
.devmem_only = need_vram && IS_ENABLED(CONFIG_DRM_XE_PAGEMAP),
1020-
.timeslice_ms = need_vram && IS_DGFX(vm->xe) &&
1021-
IS_ENABLED(CONFIG_DRM_XE_PAGEMAP) ?
1015+
.devmem_possible = devmem_possible,
1016+
.check_pages_threshold = devmem_possible ? SZ_64K : 0,
1017+
.devmem_only = need_vram && devmem_possible,
1018+
.timeslice_ms = need_vram && devmem_possible ?
10221019
vm->xe->atomic_svm_timeslice_ms : 0,
10231020
};
10241021
struct xe_validation_ctx vctx;

0 commit comments

Comments
 (0)