diff options
author | Guenter Roeck <linux@roeck-us.net> | 2016-01-03 15:11:58 -0800 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2016-01-11 21:53:59 +0100 |
commit | 0254e953537c92df3e7d0176f401a211e944fd61 (patch) | |
tree | eee8c9b7645c2add9f49c71d39b0e31950ac7efb /drivers/watchdog/watchdog_dev.c | |
parent | 2c2f3080de7341f58a5d0e8ea31cc66dd369b8f4 (diff) | |
download | linux-0254e953537c92df3e7d0176f401a211e944fd61.tar.bz2 |
watchdog: Drop pointer to watchdog device from struct watchdog_device
The lifetime of the watchdog device pointer is different from the lifetime
of its character device. Remove it entirely to avoid race conditions.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog/watchdog_dev.c')
-rw-r--r-- | drivers/watchdog/watchdog_dev.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index e89ccb2e9603..ba2ecce4aae6 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c @@ -143,7 +143,8 @@ static int watchdog_stop(struct watchdog_device *wdd) return 0; if (test_bit(WDOG_NO_WAY_OUT, &wdd->status)) { - dev_info(wdd->dev, "nowayout prevents watchdog being stopped!\n"); + pr_info("watchdog%d: nowayout prevents watchdog being stopped!\n", + wdd->id); return -EBUSY; } @@ -604,7 +605,7 @@ static int watchdog_release(struct inode *inode, struct file *file) /* If the watchdog was not stopped, send a keepalive ping */ if (err < 0) { - dev_crit(wdd->dev, "watchdog did not stop!\n"); + pr_crit("watchdog%d: watchdog did not stop!\n", wdd->id); watchdog_ping(wdd); } @@ -751,7 +752,6 @@ int watchdog_dev_register(struct watchdog_device *wdd) watchdog_cdev_unregister(wdd); return PTR_ERR(dev); } - wdd->dev = dev; return ret; } @@ -766,8 +766,7 @@ int watchdog_dev_register(struct watchdog_device *wdd) void watchdog_dev_unregister(struct watchdog_device *wdd) { - device_destroy(&watchdog_class, wdd->dev->devt); - wdd->dev = NULL; + device_destroy(&watchdog_class, wdd->wd_data->cdev.dev); watchdog_cdev_unregister(wdd); } |