summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Brost <matthew.brost@intel.com>2023-01-24 16:14:55 -0800
committerRodrigo Vivi <rodrigo.vivi@intel.com>2023-12-19 18:27:46 -0500
commita12d9216740c23dc7f526db108b4a82f1e0807e2 (patch)
treeafc538d1a9dcf877c9b0fd9212b3e475749ca4b8
parent38224c00d9c284030d60be83571e5f1bd5fc79c6 (diff)
drm/xe: Only set VM->asid for platforms that support a ASID
This will help with TLB invalidation as the ASID in TLB invalidate should be zero for platforms that do not support a ASID. Signed-off-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
-rw-r--r--drivers/gpu/drm/xe/xe_vm.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index aae9acc7759a..83f8c8a186d8 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1429,10 +1429,12 @@ static void vm_destroy_work_func(struct work_struct *w)
xe_device_mem_access_put(xe);
xe_pm_runtime_put(xe);
- mutex_lock(&xe->usm.lock);
- lookup = xa_erase(&xe->usm.asid_to_vm, vm->usm.asid);
- XE_WARN_ON(lookup != vm);
- mutex_unlock(&xe->usm.lock);
+ if (xe->info.supports_usm) {
+ mutex_lock(&xe->usm.lock);
+ lookup = xa_erase(&xe->usm.asid_to_vm, vm->usm.asid);
+ XE_WARN_ON(lookup != vm);
+ mutex_unlock(&xe->usm.lock);
+ }
}
/*
@@ -1917,16 +1919,18 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
return err;
}
- mutex_lock(&xe->usm.lock);
- err = xa_alloc_cyclic(&xe->usm.asid_to_vm, &asid, vm,
- XA_LIMIT(0, XE_MAX_ASID - 1),
- &xe->usm.next_asid, GFP_KERNEL);
- mutex_unlock(&xe->usm.lock);
- if (err) {
- xe_vm_close_and_put(vm);
- return err;
+ if (xe->info.supports_usm) {
+ mutex_lock(&xe->usm.lock);
+ err = xa_alloc_cyclic(&xe->usm.asid_to_vm, &asid, vm,
+ XA_LIMIT(0, XE_MAX_ASID - 1),
+ &xe->usm.next_asid, GFP_KERNEL);
+ mutex_unlock(&xe->usm.lock);
+ if (err) {
+ xe_vm_close_and_put(vm);
+ return err;
+ }
+ vm->usm.asid = asid;
}
- vm->usm.asid = asid;
args->vm_id = id;