aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@gmail.com>2011-01-12 20:00:05 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 11:03:12 -0500
commit19412ce9fcc9ca2d0f5b62af15c63381f0ac9657 (patch)
tree61c93d1a1a1290683483a67b943cb49a1276a251 /drivers/rtc
parent554ec37aca8f5fbe4d70df462d7032aaa5d95ae9 (diff)
drivers/rtc/rtc-omap.c: fix a memory leak
request_mem_region() will call kzalloc to allocate memory for struct resource. release_resource() unregisters the resource but does not free the allocated memory, thus use release_mem_region() instead to fix the memory leak. Also add a missing iounmap() in omap_rtc_remove(). Signed-off-by: Axel Lin <axel.lin@gmail.com> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Sekhar Nori <nsekhar@ti.com> Cc: Kevin Hilman <khilman@deeprootsystems.com> Cc: Tony Lindgren <tony@atomide.com> Acked-by: Mark A. Greer <mgreer@mvista.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-omap.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 73377b0d65da..e72b523c79a5 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -429,13 +429,14 @@ fail1:
429fail0: 429fail0:
430 iounmap(rtc_base); 430 iounmap(rtc_base);
431fail: 431fail:
432 release_resource(mem); 432 release_mem_region(mem->start, resource_size(mem));
433 return -EIO; 433 return -EIO;
434} 434}
435 435
436static int __exit omap_rtc_remove(struct platform_device *pdev) 436static int __exit omap_rtc_remove(struct platform_device *pdev)
437{ 437{
438 struct rtc_device *rtc = platform_get_drvdata(pdev); 438 struct rtc_device *rtc = platform_get_drvdata(pdev);
439 struct resource *mem = dev_get_drvdata(&rtc->dev);
439 440
440 device_init_wakeup(&pdev->dev, 0); 441 device_init_wakeup(&pdev->dev, 0);
441 442
@@ -447,8 +448,9 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
447 if (omap_rtc_timer != omap_rtc_alarm) 448 if (omap_rtc_timer != omap_rtc_alarm)
448 free_irq(omap_rtc_alarm, rtc); 449 free_irq(omap_rtc_alarm, rtc);
449 450
450 release_resource(dev_get_drvdata(&rtc->dev));
451 rtc_device_unregister(rtc); 451 rtc_device_unregister(rtc);
452 iounmap(rtc_base);
453 release_mem_region(mem->start, resource_size(mem));
452 return 0; 454 return 0;
453} 455}
454 456