Skip to content

Commit

Permalink
drm/msm: Fix failure paths in msm_drm_init()
Browse files Browse the repository at this point in the history
Ensure that we do drm_dev_put() when there is an early return in
msm_drm_init().

Signed-off-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/515606/
Link: https://lore.kernel.org/r/20221221203925.v2.2.I49dfc3654040be61702e491f1aa63d3a5f308852@changeid
Signed-off-by: Rob Clark <robdclark@chromium.org>
  • Loading branch information
Akhil P Oommen authored and Rob Clark committed Jan 16, 2023
1 parent dbeedbc commit 8636500
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
3 changes: 3 additions & 0 deletions drivers/gpu/drm/msm/disp/msm_disp_snapshot.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,9 @@ void msm_disp_snapshot_destroy(struct drm_device *drm_dev)
}

priv = drm_dev->dev_private;
if (!priv->kms)
return;

kms = priv->kms;

if (kms->dump_worker)
Expand Down
11 changes: 7 additions & 4 deletions drivers/gpu/drm/msm/msm_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ static void msm_irq_uninstall(struct drm_device *dev)
struct msm_drm_private *priv = dev->dev_private;
struct msm_kms *kms = priv->kms;

if (!priv->kms)
return;

kms->funcs->irq_uninstall(kms);
if (kms->irq_requested)
free_irq(kms->irq, dev);
Expand Down Expand Up @@ -267,8 +270,6 @@ static int msm_drm_uninit(struct device *dev)
component_unbind_all(dev, ddev);

ddev->dev_private = NULL;
drm_dev_put(ddev);

destroy_workqueue(priv->wq);

return 0;
Expand Down Expand Up @@ -441,12 +442,12 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)

ret = msm_init_vram(ddev);
if (ret)
return ret;
goto err_drm_dev_put;

/* Bind all our sub-components: */
ret = component_bind_all(dev, ddev);
if (ret)
return ret;
goto err_drm_dev_put;

dma_set_max_seg_size(dev, UINT_MAX);

Expand Down Expand Up @@ -541,6 +542,8 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)

err_msm_uninit:
msm_drm_uninit(dev);
err_drm_dev_put:
drm_dev_put(ddev);
return ret;
}

Expand Down

0 comments on commit 8636500

Please sign in to comment.