drm/xe/vm: Avoid asid lookup if none allocated
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Tue, 5 Dec 2023 14:41:42 +0000 (16:41 +0200)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:45:28 +0000 (11:45 -0500)
The destroy path can and will get called for incomplete
vm objects on error paths, where the asid is not yet allocated.
This leads to lookup fail and assert triggered.

Fix this by not asserting of asid existence if vm never
got assigned one.

Cc: Ohad Sharabi <osharabi@habana.ai>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_vm.c

index 265cc0c5e44018e0b1864234d3ffa13fbfa54065..11667529e40be3128e6891d4a2aeb816cb2b19f5 100644 (file)
@@ -1634,7 +1634,7 @@ static void vm_destroy_work_func(struct work_struct *w)
        if (!(vm->flags & XE_VM_FLAG_MIGRATION)) {
                xe_device_mem_access_put(xe);
 
-               if (xe->info.has_asid) {
+               if (xe->info.has_asid && vm->usm.asid) {
                        mutex_lock(&xe->usm.lock);
                        lookup = xa_erase(&xe->usm.asid_to_vm, vm->usm.asid);
                        xe_assert(xe, lookup == vm);