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:
Felix Kuehling 2021-02-12 01:37:52 -05:00 committed by Alex Deucher
parent 3248b6d3cb
commit 172e4ee233

View File

@ -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)