drm/amdkfd: Cleanup kfd_process if init_cwsr_apu fails
If init_cwsr_apu fails, we currently leave the kfd_process structure in place anyway. The next kfd_open will then succeed, using the existing kfd_process structure. Fix that by cleaning up the kfd_process after a failure in init_cwsr_apu. Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Philip Yang <philip.yang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
3248b6d3cb
commit
172e4ee233
@ -775,10 +775,8 @@ struct kfd_process *kfd_create_process(struct file *filep)
|
||||
goto out;
|
||||
|
||||
ret = kfd_process_init_cwsr_apu(process, filep);
|
||||
if (ret) {
|
||||
process = ERR_PTR(ret);
|
||||
goto out;
|
||||
}
|
||||
if (ret)
|
||||
goto out_destroy;
|
||||
|
||||
if (!procfs.kobj)
|
||||
goto out;
|
||||
@ -826,6 +824,14 @@ out:
|
||||
mutex_unlock(&kfd_processes_mutex);
|
||||
|
||||
return process;
|
||||
|
||||
out_destroy:
|
||||
hash_del_rcu(&process->kfd_processes);
|
||||
mutex_unlock(&kfd_processes_mutex);
|
||||
synchronize_srcu(&kfd_processes_srcu);
|
||||
/* kfd_process_free_notifier will trigger the cleanup */
|
||||
mmu_notifier_put(&process->mmu_notifier);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
struct kfd_process *kfd_get_process(const struct task_struct *thread)
|
||||
|
Loading…
Reference in New Issue
Block a user