Skip to content

Commit

Permalink
drm/xe: Only set VM->asid for platforms that support a ASID
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Matthew Brost authored and Rodrigo Vivi committed Dec 19, 2023
1 parent 38224c0 commit a12d921
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions drivers/gpu/drm/xe/xe_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

/*
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit a12d921

Please sign in to comment.