diff options
author | Julia Lawall <julia@diku.dk> | 2011-05-13 16:46:10 (GMT) |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-06-01 09:25:04 (GMT) |
commit | 77f7059a329fc8a514bbcc2f204aaa7c150e8046 (patch) | |
tree | a75f324b69a310e5e240e4f6cdec76b3b78e9b1f /arch/arm/mach-omap1/dma.c | |
parent | 30ebad9d756a0b2c97c6c4ca6c5e6b799e3b64da (diff) | |
download | linux-77f7059a329fc8a514bbcc2f204aaa7c150e8046.tar.xz |
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>
Diffstat (limited to 'arch/arm/mach-omap1/dma.c')
-rw-r--r-- | arch/arm/mach-omap1/dma.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c index d855934..f5a5220 100644 --- a/arch/arm/mach-omap1/dma.c +++ b/arch/arm/mach-omap1/dma.c @@ -284,14 +284,15 @@ static int __init omap1_system_dma_init(void) dma_base = ioremap(res[0].start, resource_size(&res[0])); if (!dma_base) { 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)); if (ret) { dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n", __func__, pdev->name, pdev->id); - goto exit_device_del; + goto exit_device_put; } 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", __func__, pdev->name); ret = -ENOMEM; - goto exit_device_put; + goto exit_device_del; } d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL); @@ -380,10 +381,10 @@ exit_release_d: kfree(d); exit_release_p: kfree(p); -exit_device_put: - platform_device_put(pdev); exit_device_del: platform_device_del(pdev); +exit_device_put: + platform_device_put(pdev); return ret; } |