From: Guenter Roeck <linux@roeck-us.net>
To: Damien Riegel <damien.riegel@savoirfairelinux.com>,
Mike Looijmans <mike.looijmans@topic.nl>,
linux-watchdog@vger.kernel.org, Wim Van Sebroeck <wim@iguana.be>,
Vivien Didelot <vivien.didelot@savoirfairelinux.com>,
kernel@savoirfairelinux.com
Subject: Re: [PATCH 5/7] watchdog: gpio_wdt: use core reboot notifier
Date: Fri, 20 Nov 2015 08:09:29 -0800 [thread overview]
Message-ID: <564F45B9.2060406@roeck-us.net> (raw)
In-Reply-To: <20151120155416.GA14407@localhost>
On 11/20/2015 07:54 AM, Damien Riegel wrote:
> On Fri, Nov 20, 2015 at 07:35:47AM -0800, Guenter Roeck wrote:
>> On 11/20/2015 07:21 AM, Damien Riegel wrote:
>>> On Fri, Nov 20, 2015 at 08:15:33AM +0100, Mike Looijmans wrote:
>>>> On 20-11-15 04:27, Guenter Roeck wrote:
>>>>> On 11/18/2015 01:02 PM, Damien Riegel wrote:
>>>>>> Get rid of the custom reboot notifier block registration and use
>>>>>> the one provided by the watchdog core.
>>>>>>
>>>>>> Signed-off-by: Damien Riegel <damien.riegel@savoirfairelinux.com>
>>>>>> Reviewed-by: Vivien Didelot <vivien.didelot@savoirlinux.com> ---
>>>>>> drivers/watchdog/gpio_wdt.c | 35
>>>>>> ++--------------------------------- 1 file changed, 2
>>>>>> insertions(+), 33 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/watchdog/gpio_wdt.c
>>>>>> b/drivers/watchdog/gpio_wdt.c index 1a3c6e8..035c238 100644 ---
>>>>>> a/drivers/watchdog/gpio_wdt.c +++ b/drivers/watchdog/gpio_wdt.c @@
>>>>>> -12,10 +12,8 @@ #include <linux/err.h> #include <linux/delay.h>
>>>>>> #include <linux/module.h> -#include <linux/notifier.h> #include
>>>>>> <linux/of_gpio.h> #include <linux/platform_device.h> -#include
>>>>>> <linux/reboot.h> #include <linux/watchdog.h>
>>>>>>
>>>>>> #define SOFT_TIMEOUT_MIN 1
>>>>>> @@ -36,7 +34,6 @@ struct gpio_wdt_priv { unsigned int hw_algo;
>>>>>> unsigned int hw_margin; unsigned long last_jiffies; -
>>>>>> struct notifier_block notifier; struct timer_list timer;
>>>>>> struct watchdog_device wdd; }; @@ -126,26 +123,6 @@ static int
>>>>>> gpio_wdt_set_timeout(struct watchdog_device *wdd, unsigned int t)
>>>>>> return gpio_wdt_ping(wdd); }
>>>>>>
>>>>>> -static int gpio_wdt_notify_sys(struct notifier_block *nb,
>>>>>> unsigned long code, - void *unused) -{ - struct
>>>>>> gpio_wdt_priv *priv = container_of(nb, struct gpio_wdt_priv, -
>>>>>> notifier); - - mod_timer(&priv->timer, 0); - - switch (code) {
>>>>>> - case SYS_HALT: - case SYS_DOWN: - gpio_wdt_disable(priv);
>>>>>> - break; - default: - break; - } -
>>>>> Slight difference in semantics here: The stop function only stops
>>>>> the watchdog if the 'always_running' flag is not set. The notifier
>>>>> here always stops it, or at least tries to stop it. Not really sure
>>>>> what that means, since the always_running flag is supposed to mean
>>>>> "the watchdog can not be stopped".
>>>>>
>>>>> Copying Mike Looijmans, who added the always-running flag, for
>>>>> input.
>>>>
>>>> Okay, I don't know quite what the "core" will do.
>>>>
>>>> If the system wants to reboot, and the watchdog is in
>>>> "always_running" mode, it must NOT stop the watchdog. You have to
>>>> keep kicking the dog until the system reboots and the bootloader can
>>>> take over. Otherwise, the watchdog may turn off the mains power (I
>>>> developed this for a medical device, which had to completely shut
>>>> down in case of trouble) or do something else that wasn't supposed
>>>> to happen yet.
>>>>
>>>> When shutting down, the assumption is that either the power-down has
>>>> already occured before the watchdog might kick in, or that the
>>>> watchdog will shut down the system because the kernel stopped
>>>> kicking it. So no special case here, it doesn't really matter
>>>> whether you kick it once more or not.
>>>>
>>>> If the external watchdog reboots the system rather than shuts down
>>>> power, the above scenario won't hurt.
>>>>
>>>> Hope this answers your question, if not, feel free to ask for more
>>>> information.
>>>>
>>>
>>> The core calls ops->stop on SYS_HALT and SYS_DOWN if the watchdog
>>> called watchdog_stop_on_reboot during initialization.
>>>
>>> In the previous patch of this serie, I change the condition on which
>>> gpio_wdt_disable is called in gpio_wdt_notify_sys, replacing
>>> SYS_POWER_OFF by SYS_DOWN. Regarding what you just said, not stopping
>>> on SYS_DOWN was a deliberate choice, so we should not modify this
>>> watchdog's behaviour.
>>>
>> Yes, or not stop it if it is configured for "always enabled", which
>> this patch does.
>>
> Right. Should I squash together the two commits which modify the gpio
> watchdog ? That way, we would keep the same behaviour all along the
> patchset.
>
Yes, think that would be a good idea - if for nothing else to avoid that
one gets applied and the other doesn't. Please add a note to the description
about the changes and the reason for it.
Thanks,
Guenter
>>> But actually, I don't understand why the notifier is registered in the
>>> first place in that case.
>>>
>>
>> Good question. Either case I think we are good, because the new behavior will
>> be to not stop the watchdog on shutdown if it is configured to "always enabled".
>>
>> Thanks,
>> Guenter
>>
>
next prev parent reply other threads:[~2015-11-20 16:09 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-18 21:02 [PATCH 0/7] watchdog: factorize reboot notifier registration Damien Riegel
2015-11-18 21:02 ` [PATCH 1/7] watchdog: core: add reboot notifier support Damien Riegel
2015-11-20 3:18 ` Guenter Roeck
2015-11-18 21:02 ` [PATCH 2/7] watchdog: bcm47xx_wdt: use core reboot notifier Damien Riegel
2015-11-20 4:13 ` Guenter Roeck
2015-11-18 21:02 ` [PATCH 3/7] watchdog: cadence_wdt: " Damien Riegel
2015-11-20 4:15 ` Guenter Roeck
2015-11-18 21:02 ` [PATCH 4/7] watchdog: gpio_wdt: stop on SYS_DOWN instead of SYS_POWER_OFF Damien Riegel
2015-11-20 4:16 ` Guenter Roeck
2015-11-18 21:02 ` [PATCH 5/7] watchdog: gpio_wdt: use core reboot notifier Damien Riegel
2015-11-20 3:27 ` Guenter Roeck
2015-11-20 7:15 ` Mike Looijmans
2015-11-20 15:21 ` Damien Riegel
2015-11-20 15:35 ` Guenter Roeck
2015-11-20 15:54 ` Damien Riegel
2015-11-20 16:09 ` Guenter Roeck [this message]
2015-11-18 21:02 ` [PATCH 6/7] watchdog: softdog: " Damien Riegel
2015-11-20 4:16 ` Guenter Roeck
2015-11-18 21:02 ` [PATCH 7/7] watchdog: w83627hf_wdt: " Damien Riegel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=564F45B9.2060406@roeck-us.net \
--to=linux@roeck-us.net \
--cc=damien.riegel@savoirfairelinux.com \
--cc=kernel@savoirfairelinux.com \
--cc=linux-watchdog@vger.kernel.org \
--cc=mike.looijmans@topic.nl \
--cc=vivien.didelot@savoirfairelinux.com \
--cc=wim@iguana.be \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox