From a12d9216740c23dc7f526db108b4a82f1e0807e2 Mon Sep 17 00:00:00 2001 From: Matthew Brost Date: Tue, 24 Jan 2023 16:14:55 -0800 Subject: [PATCH] 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 Signed-off-by: Rodrigo Vivi Reviewed-by: Niranjana Vishwanathapura --- drivers/gpu/drm/xe/xe_vm.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c index aae9acc7759a9..83f8c8a186d80 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;