Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4e98855 authored by Jayant Shekhar's avatar Jayant Shekhar Committed by Rob Clark
Browse files

drm/msm/dpu: Correct dpu destroy and disable order



In case of msm drm bind failure, dpu_mdss_destroy is triggered.
In this function, resources are freed and pm runtime disable is
called, which triggers dpu_mdss_disable. Now in dpu_mdss_disable,
driver tries to access a memory which is already freed. This
results in kernel panic. Fix this by ensuring proper sequence
of dpu destroy and disable calls.

Changes in v2:
   - Removed double spacings [Jeykumar]

Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
Signed-off-by: default avatarJayant Shekhar <jshekhar@codeaurora.org>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent c1866d44
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -156,18 +156,15 @@ static void dpu_mdss_destroy(struct drm_device *dev)
	struct dpu_mdss *dpu_mdss = to_dpu_mdss(priv->mdss);
	struct dss_module_power *mp = &dpu_mdss->mp;

	pm_runtime_disable(dev->dev);
	_dpu_mdss_irq_domain_fini(dpu_mdss);

	free_irq(platform_get_irq(pdev, 0), dpu_mdss);

	msm_dss_put_clk(mp->clk_config, mp->num_clk);
	devm_kfree(&pdev->dev, mp->clk_config);

	if (dpu_mdss->mmio)
		devm_iounmap(&pdev->dev, dpu_mdss->mmio);
	dpu_mdss->mmio = NULL;

	pm_runtime_disable(dev->dev);
	priv->mdss = NULL;
}