drm/amd/display: Fix crash on device remove/driver unload
Why: DC core is being released from DM before it's referenced from hpd_rx wq destruction code. How: Move hpd_rx destruction before DC core destruction. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
7f6ab50a62
commit
006c26a0f1
@ -1572,6 +1572,18 @@ static void amdgpu_dm_fini(struct amdgpu_device *adev)
|
||||
&adev->dm.dmub_bo_gpu_addr,
|
||||
&adev->dm.dmub_bo_cpu_addr);
|
||||
|
||||
if (adev->dm.hpd_rx_offload_wq) {
|
||||
for (i = 0; i < adev->dm.dc->caps.max_links; i++) {
|
||||
if (adev->dm.hpd_rx_offload_wq[i].wq) {
|
||||
destroy_workqueue(adev->dm.hpd_rx_offload_wq[i].wq);
|
||||
adev->dm.hpd_rx_offload_wq[i].wq = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
kfree(adev->dm.hpd_rx_offload_wq);
|
||||
adev->dm.hpd_rx_offload_wq = NULL;
|
||||
}
|
||||
|
||||
/* DC Destroy TODO: Replace destroy DAL */
|
||||
if (adev->dm.dc)
|
||||
dc_destroy(&adev->dm.dc);
|
||||
@ -1590,18 +1602,6 @@ static void amdgpu_dm_fini(struct amdgpu_device *adev)
|
||||
adev->dm.freesync_module = NULL;
|
||||
}
|
||||
|
||||
if (adev->dm.hpd_rx_offload_wq) {
|
||||
for (i = 0; i < adev->dm.dc->caps.max_links; i++) {
|
||||
if (adev->dm.hpd_rx_offload_wq[i].wq) {
|
||||
destroy_workqueue(adev->dm.hpd_rx_offload_wq[i].wq);
|
||||
adev->dm.hpd_rx_offload_wq[i].wq = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
kfree(adev->dm.hpd_rx_offload_wq);
|
||||
adev->dm.hpd_rx_offload_wq = NULL;
|
||||
}
|
||||
|
||||
mutex_destroy(&adev->dm.audio_lock);
|
||||
mutex_destroy(&adev->dm.dc_lock);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user