2014-12-08 17:45:41

by Robert Yang

[permalink] [raw]
Subject: [PATCH 1/1] Watchdog: Fixed the watchdog close/stop logic - only close the watchdog if the magic character was received and the magic close is supported.

From: ryang <[email protected]>

Signed-off-by: ryang <[email protected]>
---
drivers/watchdog/watchdog_dev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 6aaefba..73793d8 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -471,8 +471,8 @@ static int watchdog_release(struct inode *inode, struct file *file)
*/
if (!test_bit(WDOG_ACTIVE, &wdd->status))
err = 0;
- else if (test_and_clear_bit(WDOG_ALLOW_RELEASE, &wdd->status) ||
- !(wdd->info->options & WDIOF_MAGICCLOSE))
+ else if (test_and_clear_bit(WDOG_ALLOW_RELEASE, &wdd->status) &&
+ (wdd->info->options & WDIOF_MAGICCLOSE))
err = watchdog_stop(wdd);

/* If the watchdog was not stopped, send a keepalive ping */
--
1.9.1


2014-12-08 20:12:09

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH 1/1] Watchdog: Fixed the watchdog close/stop logic - only close the watchdog if the magic character was received and the magic close is supported.

On Mon, Dec 08, 2014 at 10:45:11AM -0700, Robert Yang wrote:
> From: ryang <[email protected]>
>
> Signed-off-by: ryang <[email protected]>
> ---
> drivers/watchdog/watchdog_dev.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
> index 6aaefba..73793d8 100644
> --- a/drivers/watchdog/watchdog_dev.c
> +++ b/drivers/watchdog/watchdog_dev.c
> @@ -471,8 +471,8 @@ static int watchdog_release(struct inode *inode, struct file *file)
> */
> if (!test_bit(WDOG_ACTIVE, &wdd->status))
> err = 0;
> - else if (test_and_clear_bit(WDOG_ALLOW_RELEASE, &wdd->status) ||
> - !(wdd->info->options & WDIOF_MAGICCLOSE))
> + else if (test_and_clear_bit(WDOG_ALLOW_RELEASE, &wdd->status) &&
> + (wdd->info->options & WDIOF_MAGICCLOSE))
> err = watchdog_stop(wdd);
>
Why ?

Guenter

2014-12-09 08:46:37

by Wim Van Sebroeck

[permalink] [raw]
Subject: Re: [PATCH 1/1] Watchdog: Fixed the watchdog close/stop logic - only close the watchdog if the magic character was received and the magic close is supported.

Hi Ryang,

> From: ryang <[email protected]>
>
> Signed-off-by: ryang <[email protected]>
> ---
> drivers/watchdog/watchdog_dev.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
> index 6aaefba..73793d8 100644
> --- a/drivers/watchdog/watchdog_dev.c
> +++ b/drivers/watchdog/watchdog_dev.c
> @@ -471,8 +471,8 @@ static int watchdog_release(struct inode *inode, struct file *file)
> */
> if (!test_bit(WDOG_ACTIVE, &wdd->status))
> err = 0;
> - else if (test_and_clear_bit(WDOG_ALLOW_RELEASE, &wdd->status) ||
> - !(wdd->info->options & WDIOF_MAGICCLOSE))
> + else if (test_and_clear_bit(WDOG_ALLOW_RELEASE, &wdd->status) &&
> + (wdd->info->options & WDIOF_MAGICCLOSE))
> err = watchdog_stop(wdd);
>
> /* If the watchdog was not stopped, send a keepalive ping */
> --

There is no reason for this change; you either have:
1) WDIOF_MAGICCLOSE is not supported and thus watchog may be stopped.
2) If a watchdog daemon crashes and thus closes the watchdog device (and thus it did not sent a Magic Char) then the watchdog should not be stopped but needs to reboot the system.

Kind regards,
Wim.