On calling pm_runtime_get_sync() the reference count of the device
is incremented. In case of failure, decrement the
reference count before returning the error.

Signed-off-by: Aditya Pakki <pakki...@umn.edu>
---
 drivers/gpu/drm/radeon/radeon_connectors.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c 
b/drivers/gpu/drm/radeon/radeon_connectors.c
index fe12d9d91d7a..e30834434442 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -879,8 +879,10 @@ radeon_lvds_detect(struct drm_connector *connector, bool 
force)
 
        if (!drm_kms_helper_is_poll_worker()) {
                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;
+               }
        }
 
        if (encoder) {
@@ -1025,8 +1027,10 @@ radeon_vga_detect(struct drm_connector *connector, bool 
force)
 
        if (!drm_kms_helper_is_poll_worker()) {
                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;
+               }
        }
 
        encoder = radeon_best_single_encoder(connector);
@@ -1163,8 +1167,10 @@ radeon_tv_detect(struct drm_connector *connector, bool 
force)
 
        if (!drm_kms_helper_is_poll_worker()) {
                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;
+               }
        }
 
        encoder = radeon_best_single_encoder(connector);
@@ -1247,8 +1253,10 @@ radeon_dvi_detect(struct drm_connector *connector, bool 
force)
 
        if (!drm_kms_helper_is_poll_worker()) {
                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;
+               }
        }
 
        if (radeon_connector->detected_hpd_without_ddc) {
@@ -1657,8 +1665,10 @@ radeon_dp_detect(struct drm_connector *connector, bool 
force)
 
        if (!drm_kms_helper_is_poll_worker()) {
                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;
+               }
        }
 
        if (!force && radeon_check_hpd_status_unchanged(connector)) {
-- 
2.25.1

Reply via email to