[WATCHDOG] ioremap balanced with iounmap for drivers/char/watchdog/s3c2410_wdt.c
authorAmol Lad <amol@verismonetworks.com>
Fri, 6 Oct 2006 20:41:12 +0000 (13:41 -0700)
committerWim Van Sebroeck <wim@iguana.be>
Sat, 7 Oct 2006 20:43:56 +0000 (22:43 +0200)
ioremap must be balanced by an iounmap and failing to do so can result
in a memory leak.

Signed-off-by: Amol Lad <amol@verismonetworks.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Signed-off-by: Andrew Morton <akpm@osdl.org>
drivers/char/watchdog/s3c2410_wdt.c

index b36a04ae9ab8e96306a35ce07680aed56bae40d2..d54d0efe0756f675c441fce12a87eaee1565aa74 100644 (file)
@@ -381,18 +381,21 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
        res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
        if (res == NULL) {
                printk(KERN_INFO PFX "failed to get irq resource\n");
+               iounmap(wdt_base);
                return -ENOENT;
        }
 
        ret = request_irq(res->start, s3c2410wdt_irq, 0, pdev->name, pdev);
        if (ret != 0) {
                printk(KERN_INFO PFX "failed to install irq (%d)\n", ret);
+               iounmap(wdt_base);
                return ret;
        }
 
        wdt_clock = clk_get(&pdev->dev, "watchdog");
        if (wdt_clock == NULL) {
                printk(KERN_INFO PFX "failed to find watchdog clock source\n");
+               iounmap(wdt_base);
                return -ENOENT;
        }
 
@@ -416,6 +419,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
        if (ret) {
                printk (KERN_ERR PFX "cannot register miscdev on minor=%d (%d)\n",
                        WATCHDOG_MINOR, ret);
+               iounmap(wdt_base);
                return ret;
        }
 
@@ -452,6 +456,7 @@ static int s3c2410wdt_remove(struct platform_device *dev)
                wdt_clock = NULL;
        }
 
+       iounmap(wdt_base);
        misc_deregister(&s3c2410wdt_miscdev);
        return 0;
 }