video: fbdev: pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove()
[ Upstream commit d87ad457f7e1b8d2492ca5b1531eb35030a1cc8f ] In pxa3xx_gcu_probe(), the sequence of error lable is wrong, it will leads some resource leaked, so adjust the sequence to handle the error correctly, and if pxa3xx_gcu_add_buffer() fails, pxa3xx_gcu_free_buffers() need be called. In pxa3xx_gcu_remove(), add missing clk_disable_unpreprare(). Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
c09b873f3f
commit
8b3d5bafb1
@@ -650,6 +650,7 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
|
|||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
ret = pxa3xx_gcu_add_buffer(dev, priv);
|
ret = pxa3xx_gcu_add_buffer(dev, priv);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
pxa3xx_gcu_free_buffers(dev, priv);
|
||||||
dev_err(dev, "failed to allocate DMA memory\n");
|
dev_err(dev, "failed to allocate DMA memory\n");
|
||||||
goto err_disable_clk;
|
goto err_disable_clk;
|
||||||
}
|
}
|
||||||
@@ -666,15 +667,15 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
|
|||||||
SHARED_SIZE, irq);
|
SHARED_SIZE, irq);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_free_dma:
|
err_disable_clk:
|
||||||
dma_free_coherent(dev, SHARED_SIZE,
|
clk_disable_unprepare(priv->clk);
|
||||||
priv->shared, priv->shared_phys);
|
|
||||||
|
|
||||||
err_misc_deregister:
|
err_misc_deregister:
|
||||||
misc_deregister(&priv->misc_dev);
|
misc_deregister(&priv->misc_dev);
|
||||||
|
|
||||||
err_disable_clk:
|
err_free_dma:
|
||||||
clk_disable_unprepare(priv->clk);
|
dma_free_coherent(dev, SHARED_SIZE,
|
||||||
|
priv->shared, priv->shared_phys);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -687,6 +688,7 @@ static int pxa3xx_gcu_remove(struct platform_device *pdev)
|
|||||||
pxa3xx_gcu_wait_idle(priv);
|
pxa3xx_gcu_wait_idle(priv);
|
||||||
misc_deregister(&priv->misc_dev);
|
misc_deregister(&priv->misc_dev);
|
||||||
dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys);
|
dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys);
|
||||||
|
clk_disable_unprepare(priv->clk);
|
||||||
pxa3xx_gcu_free_buffers(dev, priv);
|
pxa3xx_gcu_free_buffers(dev, priv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user