Commit bde9d73d authored by Linus Torvalds's avatar Linus Torvalds

Merge git://www.linux-watchdog.org/linux-watchdog

Pull watchdog update from Wim Van Sebroeck:
 "Fix a kdump issue in hpwdt and a possible NULL dereference"

* git://www.linux-watchdog.org/linux-watchdog:
  watchdog: Fix race condition in registration code
  watchdog: Convert to devm_ioremap_resource()
parents 5647ac0a 60403f7a
...@@ -253,11 +253,9 @@ static int ath79_wdt_probe(struct platform_device *pdev) ...@@ -253,11 +253,9 @@ static int ath79_wdt_probe(struct platform_device *pdev)
return -EINVAL; return -EINVAL;
} }
wdt_base = devm_request_and_ioremap(&pdev->dev, res); wdt_base = devm_ioremap_resource(&pdev->dev, res);
if (!wdt_base) { if (IS_ERR(wdt_base))
dev_err(&pdev->dev, "unable to remap memory region\n"); return PTR_ERR(wdt_base);
return -ENOMEM;
}
wdt_clk = devm_clk_get(&pdev->dev, "wdt"); wdt_clk = devm_clk_get(&pdev->dev, "wdt");
if (IS_ERR(wdt_clk)) if (IS_ERR(wdt_clk))
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/device.h> #include <linux/device.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/err.h>
#define MODULE_NAME "DAVINCI-WDT: " #define MODULE_NAME "DAVINCI-WDT: "
...@@ -221,11 +222,9 @@ static int davinci_wdt_probe(struct platform_device *pdev) ...@@ -221,11 +222,9 @@ static int davinci_wdt_probe(struct platform_device *pdev)
return -ENOENT; return -ENOENT;
} }
wdt_base = devm_request_and_ioremap(dev, wdt_mem); wdt_base = devm_ioremap_resource(dev, wdt_mem);
if (!wdt_base) { if (IS_ERR(wdt_base))
dev_err(dev, "ioremap failed\n"); return PTR_ERR(wdt_base);
return -EADDRNOTAVAIL;
}
ret = misc_register(&davinci_wdt_miscdev); ret = misc_register(&davinci_wdt_miscdev);
if (ret < 0) { if (ret < 0) {
......
...@@ -330,10 +330,9 @@ static int s3c2410wdt_probe(struct platform_device *pdev) ...@@ -330,10 +330,9 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
} }
/* get the memory region for the watchdog timer */ /* get the memory region for the watchdog timer */
wdt_base = devm_request_and_ioremap(dev, wdt_mem); wdt_base = devm_ioremap_resource(dev, wdt_mem);
if (wdt_base == NULL) { if (IS_ERR(wdt_base)) {
dev_err(dev, "failed to devm_request_and_ioremap() region\n"); ret = PTR_ERR(wdt_base);
ret = -ENOMEM;
goto err; goto err;
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h>
#include <asm/watchdog.h> #include <asm/watchdog.h>
#define DRV_NAME "sh-wdt" #define DRV_NAME "sh-wdt"
...@@ -249,9 +250,9 @@ static int sh_wdt_probe(struct platform_device *pdev) ...@@ -249,9 +250,9 @@ static int sh_wdt_probe(struct platform_device *pdev)
wdt->clk = NULL; wdt->clk = NULL;
} }
wdt->base = devm_request_and_ioremap(wdt->dev, res); wdt->base = devm_ioremap_resource(wdt->dev, res);
if (unlikely(!wdt->base)) { if (IS_ERR(wdt->base)) {
rc = -EADDRNOTAVAIL; rc = PTR_ERR(wdt->base);
goto err; goto err;
} }
......
...@@ -523,6 +523,7 @@ int watchdog_dev_register(struct watchdog_device *watchdog) ...@@ -523,6 +523,7 @@ int watchdog_dev_register(struct watchdog_device *watchdog)
int err, devno; int err, devno;
if (watchdog->id == 0) { if (watchdog->id == 0) {
old_wdd = watchdog;
watchdog_miscdev.parent = watchdog->parent; watchdog_miscdev.parent = watchdog->parent;
err = misc_register(&watchdog_miscdev); err = misc_register(&watchdog_miscdev);
if (err != 0) { if (err != 0) {
...@@ -531,9 +532,9 @@ int watchdog_dev_register(struct watchdog_device *watchdog) ...@@ -531,9 +532,9 @@ int watchdog_dev_register(struct watchdog_device *watchdog)
if (err == -EBUSY) if (err == -EBUSY)
pr_err("%s: a legacy watchdog module is probably present.\n", pr_err("%s: a legacy watchdog module is probably present.\n",
watchdog->info->identity); watchdog->info->identity);
old_wdd = NULL;
return err; return err;
} }
old_wdd = watchdog;
} }
/* Fill in the data structures */ /* Fill in the data structures */
......
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