Commit e6d5c64e authored by Jiawei Gu's avatar Jiawei Gu Committed by Alex Deucher

drm/amdgpu: fix potential memory leak during navi12 deinitialization

Navi12 HDCP & DTM deinitialization needs continue to free bo if already
created though initialized flag is not set.
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarJiawei Gu <Jiawei.Gu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4f6a0550
...@@ -1315,8 +1315,12 @@ static int psp_hdcp_terminate(struct psp_context *psp) ...@@ -1315,8 +1315,12 @@ static int psp_hdcp_terminate(struct psp_context *psp)
if (amdgpu_sriov_vf(psp->adev)) if (amdgpu_sriov_vf(psp->adev))
return 0; return 0;
if (!psp->hdcp_context.hdcp_initialized) if (!psp->hdcp_context.hdcp_initialized) {
return 0; if (psp->hdcp_context.hdcp_shared_buf)
goto out;
else
return 0;
}
ret = psp_hdcp_unload(psp); ret = psp_hdcp_unload(psp);
if (ret) if (ret)
...@@ -1324,6 +1328,7 @@ static int psp_hdcp_terminate(struct psp_context *psp) ...@@ -1324,6 +1328,7 @@ static int psp_hdcp_terminate(struct psp_context *psp)
psp->hdcp_context.hdcp_initialized = false; psp->hdcp_context.hdcp_initialized = false;
out:
/* free hdcp shared memory */ /* free hdcp shared memory */
amdgpu_bo_free_kernel(&psp->hdcp_context.hdcp_shared_bo, amdgpu_bo_free_kernel(&psp->hdcp_context.hdcp_shared_bo,
&psp->hdcp_context.hdcp_shared_mc_addr, &psp->hdcp_context.hdcp_shared_mc_addr,
...@@ -1462,8 +1467,12 @@ static int psp_dtm_terminate(struct psp_context *psp) ...@@ -1462,8 +1467,12 @@ static int psp_dtm_terminate(struct psp_context *psp)
if (amdgpu_sriov_vf(psp->adev)) if (amdgpu_sriov_vf(psp->adev))
return 0; return 0;
if (!psp->dtm_context.dtm_initialized) if (!psp->dtm_context.dtm_initialized) {
return 0; if (psp->dtm_context.dtm_shared_buf)
goto out;
else
return 0;
}
ret = psp_dtm_unload(psp); ret = psp_dtm_unload(psp);
if (ret) if (ret)
...@@ -1471,6 +1480,7 @@ static int psp_dtm_terminate(struct psp_context *psp) ...@@ -1471,6 +1480,7 @@ static int psp_dtm_terminate(struct psp_context *psp)
psp->dtm_context.dtm_initialized = false; psp->dtm_context.dtm_initialized = false;
out:
/* free hdcp shared memory */ /* free hdcp shared memory */
amdgpu_bo_free_kernel(&psp->dtm_context.dtm_shared_bo, amdgpu_bo_free_kernel(&psp->dtm_context.dtm_shared_bo,
&psp->dtm_context.dtm_shared_mc_addr, &psp->dtm_context.dtm_shared_mc_addr,
......
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