forked from Minki/linux
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: Douglas Anderson <dianders@chromium.org> Signed-off-by: Jayant Shekhar <jshekhar@codeaurora.org> Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
c1866d44d1
commit
d4e98855d1
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user