As soon as the lock is dropped the VM pointer can be invalid.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
 
        spin_lock(&adev->vm_manager.pasid_lock);
        vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
-       spin_unlock(&adev->vm_manager.pasid_lock);
-       if (!vm)
+       if (!vm) {
                /* VM not found, can't track fault credit */
+               spin_unlock(&adev->vm_manager.pasid_lock);
                return true;
+       }
 
        /* No lock needed. only accessed by IRQ handler */
-       if (!vm->fault_credit)
+       if (!vm->fault_credit) {
                /* Too many faults in this VM */
+               spin_unlock(&adev->vm_manager.pasid_lock);
                return false;
+       }
 
        vm->fault_credit--;
+       spin_unlock(&adev->vm_manager.pasid_lock);
        return true;
 }