Messages in this thread | | | From | Alex Deucher <> | Date | Mon, 15 Jun 2020 17:52:14 -0400 | Subject | Re: [PATCH] drm/radeon: fix multiple reference count leak |
| |
On Mon, Jun 15, 2020 at 3:27 AM Aditya Pakki <pakki001@umn.edu> wrote: > > 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.
Is this required if pm_runtime_get_sync() fails?
Alex
> > Signed-off-by: Aditya Pakki <pakki001@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 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
| |