Re: [PATCH] watchdog: core: module param to activate watchdog

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Sat, Mar 01, 2014 at 09:11:18PM -0800, Guenter Roeck wrote:
> On 02/28/2014 08:16 AM, Markus Pargmann wrote:
> >Many watchdog driver reset the watchdog device on initialization. This
> >is a problem if the watchdog is activated by the bootloader and should
> >be active the whole time until the userspace can write to it.
> >
> 
> Shouldn't those watchdog drivers be fixed to keep the watchdog running
> if it was already active ? Otherwise there is still the time between
> driver initialization, which disables the watchdog, and it being re-enabled
> by watchdog registration.

Yes there is still a time between stopping watchdog and reenabling it.
But as mentioned in the other mail, I think this should be some generic
solution. Also the watchdog core would not know that the watchdog device
is active when the watchdog driver keeps it running.

> 
> Also, does this affect or impact drivers which _do_ keep the watchdog
> enabled ?

I don't know of such a driver. However those drivers would have to
expect that they are started at some point through the watchdog core. At
least when someone opens the watchdog device and pings it.

> 
> >This patch adds a module parameter (watchdog.activate_first) that
> >activates the first registered watchdog. Using this parameter it is
> >possible to have an active watchdog during the whole boot process.
> >
> >Signed-off-by: Markus Pargmann <mpa@xxxxxxxxxxxxxx>
> >---
> >  drivers/watchdog/watchdog_core.c |  4 ++++
> >  drivers/watchdog/watchdog_core.h |  4 ++++
> >  drivers/watchdog/watchdog_dev.c  | 21 ++++++++++++++++++++-
> >  3 files changed, 28 insertions(+), 1 deletion(-)
> >
> >diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
> >index cec9b55..6db16eb 100644
> >--- a/drivers/watchdog/watchdog_core.c
> >+++ b/drivers/watchdog/watchdog_core.c
> >@@ -43,6 +43,10 @@
> >  static DEFINE_IDA(watchdog_ida);
> >  static struct class *watchdog_class;
> >
> >+unsigned int activate_first = 0;
> 
> Bad variable name for a global variable.
> 
> >+module_param(activate_first, uint, 0);
> >+MODULE_PARM_DESC(activate_first, "Activation timeout for first watchdog registered. 0 means no activation.");
> >+
> 
> Does that _have_ to be in this file ? Would be much easier
> if it was in watchdog_dev.c, where it is used.

As far as I know, it has to be in this file, as this is the watchdog
module. Perhaps I can try to move it to watchdog_dev.c somehow.

I will fix the other comments if there is a second version of this
patch.

Thanks,

Markus


> 
> >  static void watchdog_check_min_max_timeout(struct watchdog_device *wdd)
> >  {
> >  	/*
> >diff --git a/drivers/watchdog/watchdog_core.h b/drivers/watchdog/watchdog_core.h
> >index 6c95141..4526170 100644
> >--- a/drivers/watchdog/watchdog_core.h
> >+++ b/drivers/watchdog/watchdog_core.h
> >@@ -28,6 +28,10 @@
> >
> >  #define MAX_DOGS	32	/* Maximum number of watchdog devices */
> >
> >+/* Activate first registered watchdog and set this as the timeout value
> >+ * (only != 0) */
> 
> Coding style.
> 
> >+extern unsigned int activate_first;
> >+
> >  /*
> >   *	Functions/procedures to be called by the core
> >   */
> >diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
> >index 6aaefba..fe60fdc 100644
> >--- a/drivers/watchdog/watchdog_dev.c
> >+++ b/drivers/watchdog/watchdog_dev.c
> >@@ -553,8 +553,27 @@ int watchdog_dev_register(struct watchdog_device *watchdog)
> >  			misc_deregister(&watchdog_miscdev);
> >  			old_wdd = NULL;
> >  		}
> >+
> 
> Is that extra empty line really necessary ?
> 
> >+		return err;
> >  	}
> >-	return err;
> >+
> >+	if (activate_first && watchdog->id == 0) {
> >+		err = watchdog_set_timeout(watchdog, activate_first);
> >+		if (err && err != -EOPNOTSUPP) {
> >+			pr_err("watchdog%d failed to set timeout for first activation\n",
> >+					watchdog->id);
> >+			return err;
> >+		}
> >+
> >+		err = watchdog_start(watchdog);
> >+		if (err) {
> >+			pr_err("watchdog%d failed to start first watchdog\n",
> >+					watchdog->id);
> >+			return err;
> >+		}
> >+	}
> >+
> >+	return 0;
> >  }
> >
> >  /*
> >
> 
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux