forked from Minki/linux
drivers/dma/pl330.c: add missing iounmap
Add missing iounmap in error handling code, in a case where the function already preforms iounmap on some other execution path. This patch additionally adds calls to clk_disable and clk_put. A simplified version of the semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> @@ expression e; statement S,S1; int ret; @@ e = \(ioremap\|ioremap_nocache\)(...) ... when != iounmap(e) if (<+...e...+>) S ... when any when != iounmap(e) *if (...) { ... when != iounmap(e) return ...; } ... when any iounmap(e); // </smpl> Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
This commit is contained in:
parent
2b4f130e05
commit
7bec78e0a8
@ -829,7 +829,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
if (IS_ERR(pdmac->clk)) {
|
||||
dev_err(&adev->dev, "Cannot get operation clock.\n");
|
||||
ret = -EINVAL;
|
||||
goto probe_err1;
|
||||
goto probe_err2;
|
||||
}
|
||||
|
||||
amba_set_drvdata(adev, pdmac);
|
||||
@ -843,11 +843,11 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
ret = request_irq(irq, pl330_irq_handler, 0,
|
||||
dev_name(&adev->dev), pi);
|
||||
if (ret)
|
||||
goto probe_err2;
|
||||
goto probe_err3;
|
||||
|
||||
ret = pl330_add(pi);
|
||||
if (ret)
|
||||
goto probe_err3;
|
||||
goto probe_err4;
|
||||
|
||||
INIT_LIST_HEAD(&pdmac->desc_pool);
|
||||
spin_lock_init(&pdmac->pool_lock);
|
||||
@ -904,7 +904,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
ret = dma_async_device_register(pd);
|
||||
if (ret) {
|
||||
dev_err(&adev->dev, "unable to register DMAC\n");
|
||||
goto probe_err4;
|
||||
goto probe_err5;
|
||||
}
|
||||
|
||||
dev_info(&adev->dev,
|
||||
@ -917,10 +917,15 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
|
||||
return 0;
|
||||
|
||||
probe_err4:
|
||||
probe_err5:
|
||||
pl330_del(pi);
|
||||
probe_err3:
|
||||
probe_err4:
|
||||
free_irq(irq, pi);
|
||||
probe_err3:
|
||||
#ifndef CONFIG_PM_RUNTIME
|
||||
clk_disable(pdmac->clk);
|
||||
#endif
|
||||
clk_put(pdmac->clk);
|
||||
probe_err2:
|
||||
iounmap(pi->base);
|
||||
probe_err1:
|
||||
|
Loading…
Reference in New Issue
Block a user