arch/arm/mach-omap1/dma.c: Invert calls to platform_device_put and platform_device_del
Platform_device_del should be called before platform_device_put, as platform_device_put can delete the structure. Additionally, improve the error handling code for the call to ioremap, so that it calls platform_device_put. The semantic match that finds this problem is: (http://coccinelle.lip6.fr/) // <smpl> @@ expression e1,e2; @@ *platform_device_put(e1); ... when != e1 = e2 *platform_device_del(e1); // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
committed by
Tony Lindgren
parent
30ebad9d75
commit
77f7059a32
@@ -284,14 +284,15 @@ static int __init omap1_system_dma_init(void)
|
|||||||
dma_base = ioremap(res[0].start, resource_size(&res[0]));
|
dma_base = ioremap(res[0].start, resource_size(&res[0]));
|
||||||
if (!dma_base) {
|
if (!dma_base) {
|
||||||
pr_err("%s: Unable to ioremap\n", __func__);
|
pr_err("%s: Unable to ioremap\n", __func__);
|
||||||
return -ENODEV;
|
ret = -ENODEV;
|
||||||
|
goto exit_device_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));
|
ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n",
|
dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n",
|
||||||
__func__, pdev->name, pdev->id);
|
__func__, pdev->name, pdev->id);
|
||||||
goto exit_device_del;
|
goto exit_device_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL);
|
p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL);
|
||||||
@@ -299,7 +300,7 @@ static int __init omap1_system_dma_init(void)
|
|||||||
dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n",
|
dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n",
|
||||||
__func__, pdev->name);
|
__func__, pdev->name);
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto exit_device_put;
|
goto exit_device_del;
|
||||||
}
|
}
|
||||||
|
|
||||||
d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL);
|
d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL);
|
||||||
@@ -380,10 +381,10 @@ exit_release_d:
|
|||||||
kfree(d);
|
kfree(d);
|
||||||
exit_release_p:
|
exit_release_p:
|
||||||
kfree(p);
|
kfree(p);
|
||||||
exit_device_put:
|
|
||||||
platform_device_put(pdev);
|
|
||||||
exit_device_del:
|
exit_device_del:
|
||||||
platform_device_del(pdev);
|
platform_device_del(pdev);
|
||||||
|
exit_device_put:
|
||||||
|
platform_device_put(pdev);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user