From: Corey Minyard <cminyard@xxxxxxxxxx> The reboot notifier unconditionally calls the stop function on the watchdog, which would result in a crash if the watchdog didn't have a stop function. So check at register time to see if there is a stop function, and don't do stop_on_reboot if it is NULL. Signed-off-by: Corey Minyard <cminyard@xxxxxxxxxx> --- drivers/watchdog/watchdog_core.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c index 423844757812..03943a34e9fb 100644 --- a/drivers/watchdog/watchdog_core.c +++ b/drivers/watchdog/watchdog_core.c @@ -260,10 +260,16 @@ static int __watchdog_register_device(struct watchdog_device *wdd) /* Module parameter to force watchdog policy on reboot. */ if (stop_on_reboot != -1) { - if (stop_on_reboot) - set_bit(WDOG_STOP_ON_REBOOT, &wdd->status); - else + if (stop_on_reboot) { + if (!wdd->ops->stop) { + pr_err("watchdog%d: stop_on_reboot set, but no stop function. Ignoring stop_on_reboot.\n", wdd->id); + clear_bit(WDOG_STOP_ON_REBOOT, &wdd->status); + } else { + set_bit(WDOG_STOP_ON_REBOOT, &wdd->status); + } + } else { clear_bit(WDOG_STOP_ON_REBOOT, &wdd->status); + } } if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) { -- 2.17.1