drm/amdgpu/display: fix ref count leak when pm_runtime_get_sync fails
[ Upstream commit f79f94765f8c39db0b7dec1d335ab046aac03f20 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d94a5e441c
commit
f93736e489
@ -718,8 +718,10 @@ amdgpu_connector_lvds_detect(struct drm_connector *connector, bool force)
|
|||||||
|
|
||||||
if (!drm_kms_helper_is_poll_worker()) {
|
if (!drm_kms_helper_is_poll_worker()) {
|
||||||
r = pm_runtime_get_sync(connector->dev->dev);
|
r = pm_runtime_get_sync(connector->dev->dev);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
pm_runtime_put_autosuspend(connector->dev->dev);
|
||||||
return connector_status_disconnected;
|
return connector_status_disconnected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encoder) {
|
if (encoder) {
|
||||||
@ -856,8 +858,10 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
|
|||||||
|
|
||||||
if (!drm_kms_helper_is_poll_worker()) {
|
if (!drm_kms_helper_is_poll_worker()) {
|
||||||
r = pm_runtime_get_sync(connector->dev->dev);
|
r = pm_runtime_get_sync(connector->dev->dev);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
pm_runtime_put_autosuspend(connector->dev->dev);
|
||||||
return connector_status_disconnected;
|
return connector_status_disconnected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
encoder = amdgpu_connector_best_single_encoder(connector);
|
encoder = amdgpu_connector_best_single_encoder(connector);
|
||||||
@ -979,8 +983,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
|
|||||||
|
|
||||||
if (!drm_kms_helper_is_poll_worker()) {
|
if (!drm_kms_helper_is_poll_worker()) {
|
||||||
r = pm_runtime_get_sync(connector->dev->dev);
|
r = pm_runtime_get_sync(connector->dev->dev);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
pm_runtime_put_autosuspend(connector->dev->dev);
|
||||||
return connector_status_disconnected;
|
return connector_status_disconnected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
|
if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
|
||||||
@ -1329,8 +1335,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
|
|||||||
|
|
||||||
if (!drm_kms_helper_is_poll_worker()) {
|
if (!drm_kms_helper_is_poll_worker()) {
|
||||||
r = pm_runtime_get_sync(connector->dev->dev);
|
r = pm_runtime_get_sync(connector->dev->dev);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
pm_runtime_put_autosuspend(connector->dev->dev);
|
||||||
return connector_status_disconnected;
|
return connector_status_disconnected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
|
if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user