amdgpu_userq_input_va_validate(adev, queue, args->in.rptr_va, AMDGPU_GPU_PAGE_SIZE) ||
amdgpu_userq_input_va_validate(adev, queue, args->in.wptr_va, AMDGPU_GPU_PAGE_SIZE)) {
r = -EINVAL;
- goto free_queue;
+ goto clean_mapping;
}
/* Convert relative doorbell offset into absolute doorbell index */
if (index == (uint64_t)-EINVAL) {
drm_file_err(uq_mgr->file, "Failed to get doorbell for queue\n");
r = -EINVAL;
- goto free_queue;
+ goto clean_mapping;
}
queue->doorbell_index = index;
r = amdgpu_userq_fence_driver_alloc(adev, &queue->fence_drv);
if (r) {
drm_file_err(uq_mgr->file, "Failed to alloc fence driver\n");
- goto free_queue;
+ goto clean_mapping;
}
/*
clean_fence_driver:
amdgpu_userq_fence_driver_free(queue);
mutex_unlock(&uq_mgr->userq_mutex);
-free_queue:
+clean_mapping:
+ amdgpu_userq_buffer_vas_list_cleanup(adev, queue);
kfree(queue);
return r;
}