Commit df9eba8c authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

pata_at91: fix resource release

Julias Lawall discovered that pata_at91 wasn't freeing a memory region
allocated with kzalloc() on init failure paths.  Upon review,
pata_at91 also seems to be doing unnecessary explicit resource
releases for managed resources too.  Convert memory allocation to
managed one and drop unnecessary explicit resource releases.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: Julia Lawall <julia@diku.dk>
Cc: Sergey Matyukevich <geomatsi@gmail.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 7cb7beb3
...@@ -250,7 +250,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev) ...@@ -250,7 +250,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev)
ata_port_desc(ap, "no IRQ, using PIO polling"); ata_port_desc(ap, "no IRQ, using PIO polling");
} }
info = kzalloc(sizeof(*info), GFP_KERNEL); info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
if (!info) { if (!info) {
dev_err(dev, "failed to allocate memory for private data\n"); dev_err(dev, "failed to allocate memory for private data\n");
...@@ -275,7 +275,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev) ...@@ -275,7 +275,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev)
if (!info->ide_addr) { if (!info->ide_addr) {
dev_err(dev, "failed to map IO base\n"); dev_err(dev, "failed to map IO base\n");
ret = -ENOMEM; ret = -ENOMEM;
goto err_ide_ioremap; goto err_put;
} }
info->alt_addr = devm_ioremap(dev, info->alt_addr = devm_ioremap(dev,
...@@ -284,7 +284,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev) ...@@ -284,7 +284,7 @@ static int __devinit pata_at91_probe(struct platform_device *pdev)
if (!info->alt_addr) { if (!info->alt_addr) {
dev_err(dev, "failed to map CTL base\n"); dev_err(dev, "failed to map CTL base\n");
ret = -ENOMEM; ret = -ENOMEM;
goto err_alt_ioremap; goto err_put;
} }
ap->ioaddr.cmd_addr = info->ide_addr; ap->ioaddr.cmd_addr = info->ide_addr;
...@@ -303,13 +303,8 @@ static int __devinit pata_at91_probe(struct platform_device *pdev) ...@@ -303,13 +303,8 @@ static int __devinit pata_at91_probe(struct platform_device *pdev)
irq ? ata_sff_interrupt : NULL, irq ? ata_sff_interrupt : NULL,
irq_flags, &pata_at91_sht); irq_flags, &pata_at91_sht);
err_alt_ioremap: err_put:
devm_iounmap(dev, info->ide_addr);
err_ide_ioremap:
clk_put(info->mck); clk_put(info->mck);
kfree(info);
return ret; return ret;
} }
...@@ -317,7 +312,6 @@ static int __devexit pata_at91_remove(struct platform_device *pdev) ...@@ -317,7 +312,6 @@ static int __devexit pata_at91_remove(struct platform_device *pdev)
{ {
struct ata_host *host = dev_get_drvdata(&pdev->dev); struct ata_host *host = dev_get_drvdata(&pdev->dev);
struct at91_ide_info *info; struct at91_ide_info *info;
struct device *dev = &pdev->dev;
if (!host) if (!host)
return 0; return 0;
...@@ -328,11 +322,8 @@ static int __devexit pata_at91_remove(struct platform_device *pdev) ...@@ -328,11 +322,8 @@ static int __devexit pata_at91_remove(struct platform_device *pdev)
if (!info) if (!info)
return 0; return 0;
devm_iounmap(dev, info->ide_addr);
devm_iounmap(dev, info->alt_addr);
clk_put(info->mck); clk_put(info->mck);
kfree(info);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment