Commit 7136f956 authored by Rafael Mendonca's avatar Rafael Mendonca Committed by Alex Deucher

drm/amdgpu: Fix memory leak in hpd_rx_irq_create_workqueue()

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: 8e794421 ("drm/amd/display: Fork thread to offload work of hpd_rx_irq")
Signed-off-by: default avatarRafael Mendonca <rafaelmendsr@gmail.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 221bb3a9
...@@ -1296,13 +1296,21 @@ static struct hpd_rx_irq_offload_work_queue *hpd_rx_irq_create_workqueue(struct ...@@ -1296,13 +1296,21 @@ static struct hpd_rx_irq_offload_work_queue *hpd_rx_irq_create_workqueue(struct
if (hpd_rx_offload_wq[i].wq == NULL) { if (hpd_rx_offload_wq[i].wq == NULL) {
DRM_ERROR("create amdgpu_dm_hpd_rx_offload_wq fail!"); 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); spin_lock_init(&hpd_rx_offload_wq[i].offload_lock);
} }
return hpd_rx_offload_wq; 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 { struct amdgpu_stutter_quirk {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment