mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 22:47:56 +00:00
264873b3c5
In the old configuration the SoC issued a reboot if the watchdog was killed also if it was kill with TERM and not KILL. This will fix #11724. SVN-Revision: 34324
91 lines
2.8 KiB
Diff
91 lines
2.8 KiB
Diff
--- a/drivers/watchdog/bcm47xx_wdt.c
|
|
+++ b/drivers/watchdog/bcm47xx_wdt.c
|
|
@@ -44,12 +44,13 @@ MODULE_PARM_DESC(nowayout,
|
|
"Watchdog cannot be stopped once started (default="
|
|
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
|
|
|
+
|
|
static inline struct bcm47xx_wdt *bcm47xx_wdt_get(struct watchdog_device *wdd)
|
|
{
|
|
return container_of(wdd, struct bcm47xx_wdt, wdd);
|
|
}
|
|
|
|
-static void bcm47xx_timer_tick(unsigned long data)
|
|
+static void bcm47xx_wdt_soft_timer_tick(unsigned long data)
|
|
{
|
|
struct bcm47xx_wdt *wdt = (struct bcm47xx_wdt *)data;
|
|
u32 next_tick = min(wdt->wdd.timeout * 1000, wdt->max_timer_ms);
|
|
@@ -62,7 +63,7 @@ static void bcm47xx_timer_tick(unsigned
|
|
}
|
|
}
|
|
|
|
-static int bcm47xx_wdt_keepalive(struct watchdog_device *wdd)
|
|
+static int bcm47xx_wdt_soft_keepalive(struct watchdog_device *wdd)
|
|
{
|
|
struct bcm47xx_wdt *wdt = bcm47xx_wdt_get(wdd);
|
|
|
|
@@ -71,17 +72,17 @@ static int bcm47xx_wdt_keepalive(struct
|
|
return 0;
|
|
}
|
|
|
|
-static int bcm47xx_wdt_start(struct watchdog_device *wdd)
|
|
+static int bcm47xx_wdt_soft_start(struct watchdog_device *wdd)
|
|
{
|
|
struct bcm47xx_wdt *wdt = bcm47xx_wdt_get(wdd);
|
|
|
|
- bcm47xx_wdt_keepalive(wdd);
|
|
- bcm47xx_timer_tick((unsigned long)wdt);
|
|
+ bcm47xx_wdt_soft_keepalive(wdd);
|
|
+ bcm47xx_wdt_soft_timer_tick((unsigned long)wdt);
|
|
|
|
return 0;
|
|
}
|
|
|
|
-static int bcm47xx_wdt_stop(struct watchdog_device *wdd)
|
|
+static int bcm47xx_wdt_soft_stop(struct watchdog_device *wdd)
|
|
{
|
|
struct bcm47xx_wdt *wdt = bcm47xx_wdt_get(wdd);
|
|
|
|
@@ -91,8 +92,8 @@ static int bcm47xx_wdt_stop(struct watch
|
|
return 0;
|
|
}
|
|
|
|
-static int bcm47xx_wdt_set_timeout(struct watchdog_device *wdd,
|
|
- unsigned int new_time)
|
|
+static int bcm47xx_wdt_soft_set_timeout(struct watchdog_device *wdd,
|
|
+ unsigned int new_time)
|
|
{
|
|
if (new_time < 1 || new_time > WDT_MAX_TIME) {
|
|
pr_warn("timeout value must be 1<=x<=%d, using %d\n",
|
|
@@ -122,12 +123,12 @@ static int bcm47xx_wdt_notify_sys(struct
|
|
return NOTIFY_DONE;
|
|
}
|
|
|
|
-static struct watchdog_ops bcm47xx_wdt_ops = {
|
|
+static struct watchdog_ops bcm47xx_wdt_soft_ops = {
|
|
.owner = THIS_MODULE,
|
|
- .start = bcm47xx_wdt_start,
|
|
- .stop = bcm47xx_wdt_stop,
|
|
- .ping = bcm47xx_wdt_keepalive,
|
|
- .set_timeout = bcm47xx_wdt_set_timeout,
|
|
+ .start = bcm47xx_wdt_soft_start,
|
|
+ .stop = bcm47xx_wdt_soft_stop,
|
|
+ .ping = bcm47xx_wdt_soft_keepalive,
|
|
+ .set_timeout = bcm47xx_wdt_soft_set_timeout,
|
|
};
|
|
|
|
static int __devinit bcm47xx_wdt_probe(struct platform_device *pdev)
|
|
@@ -138,10 +139,10 @@ static int __devinit bcm47xx_wdt_probe(s
|
|
if (!wdt)
|
|
return -ENXIO;
|
|
|
|
- setup_timer(&wdt->soft_timer, bcm47xx_timer_tick,
|
|
+ setup_timer(&wdt->soft_timer, bcm47xx_wdt_soft_timer_tick,
|
|
(long unsigned int)wdt);
|
|
|
|
- wdt->wdd.ops = &bcm47xx_wdt_ops;
|
|
+ wdt->wdd.ops = &bcm47xx_wdt_soft_ops;
|
|
wdt->wdd.info = &bcm47xx_wdt_info;
|
|
wdt->wdd.timeout = WDT_DEFAULT_TIME;
|
|
ret = wdt->wdd.ops->set_timeout(&wdt->wdd, timeout);
|