drm/amdgpu: Fix memory leak in hpd_rx_irq_create_workqueue()
[ Upstream commit 7136f956c73c4ba50bfeb61653dfd6a9669ea915 ] If construction of the array of work queues to handle hpd_rx_irq offload work fails, we need to unwind. Destroy all the created workqueues and the allocated memory for the hpd_rx_irq_offload_work_queue struct array. Fixes: 8e794421bc98 ("drm/amd/display: Fork thread to offload work of hpd_rx_irq") Signed-off-by: Rafael Mendonca <rafaelmendsr@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a5ce83e85d
commit
3ba3814c00
@ -1307,13 +1307,21 @@ static struct hpd_rx_irq_offload_work_queue *hpd_rx_irq_create_workqueue(struct
|
||||
|
||||
if (hpd_rx_offload_wq[i].wq == NULL) {
|
||||
DRM_ERROR("create amdgpu_dm_hpd_rx_offload_wq fail!");
|
||||
return NULL;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
spin_lock_init(&hpd_rx_offload_wq[i].offload_lock);
|
||||
}
|
||||
|
||||
return hpd_rx_offload_wq;
|
||||
|
||||
out_err:
|
||||
for (i = 0; i < max_caps; i++) {
|
||||
if (hpd_rx_offload_wq[i].wq)
|
||||
destroy_workqueue(hpd_rx_offload_wq[i].wq);
|
||||
}
|
||||
kfree(hpd_rx_offload_wq);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct amdgpu_stutter_quirk {
|
||||
|
Loading…
x
Reference in New Issue
Block a user