drm/amdgpu: fix ref count leak in amdgpu_display_crtc_set_config
in amdgpu_display_crtc_set_config, the call to pm_runtime_get_sync increments the counter even in case of failure, leading to incorrect ref count. In case of failure, decrement the ref count before returning. Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
5509ac65f2
commit
e008fa6fb4
|
@ -282,7 +282,7 @@ int amdgpu_display_crtc_set_config(struct drm_mode_set *set,
|
||||||
|
|
||||||
ret = pm_runtime_get_sync(dev->dev);
|
ret = pm_runtime_get_sync(dev->dev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto out;
|
||||||
|
|
||||||
ret = drm_crtc_helper_set_config(set, ctx);
|
ret = drm_crtc_helper_set_config(set, ctx);
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ int amdgpu_display_crtc_set_config(struct drm_mode_set *set,
|
||||||
take the current one */
|
take the current one */
|
||||||
if (active && !adev->have_disp_power_ref) {
|
if (active && !adev->have_disp_power_ref) {
|
||||||
adev->have_disp_power_ref = true;
|
adev->have_disp_power_ref = true;
|
||||||
return ret;
|
goto out;
|
||||||
}
|
}
|
||||||
/* if we have no active crtcs, then drop the power ref
|
/* if we have no active crtcs, then drop the power ref
|
||||||
we got before */
|
we got before */
|
||||||
|
@ -306,6 +306,7 @@ int amdgpu_display_crtc_set_config(struct drm_mode_set *set,
|
||||||
adev->have_disp_power_ref = false;
|
adev->have_disp_power_ref = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
/* drop the power reference we got coming in here */
|
/* drop the power reference we got coming in here */
|
||||||
pm_runtime_put_autosuspend(dev->dev);
|
pm_runtime_put_autosuspend(dev->dev);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue