mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Wim Van Sebroeck <wim@iguana.be>
To: LKML <linux-kernel@vger.kernel.org>,
	Linux Watchdog Mailing List <linux-watchdog@vger.kernel.org>
Cc: Wim Van Sebroeck <wim@iguana.be>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Arnd Bergmann <arnd@arndb.de>,
	Wolfram Sang <w.sang@pengutronix.de>
Subject: [PATCH 9/9] watchdog: WatchDog Timer Driver Core - Add minimum and max timeout
Date: Wed, 27 Jul 2011 20:16:40 +0000	[thread overview]
Message-ID: <1311797800-2706-9-git-send-email-wim@iguana.be> (raw)
In-Reply-To: <1311797800-2706-1-git-send-email-wim@iguana.be>

Add min_timeout (minimum timeout) and max_timeout
values so that the framework can check if the new
timeout value is between the minimum and maximum
timeout values. If both values are 0, then the
framework will leave the check for the watchdog
device driver itself.

Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
---
 Documentation/watchdog/watchdog-kernel-api.txt |    4 ++++
 drivers/watchdog/watchdog_core.c               |   10 ++++++++++
 drivers/watchdog/watchdog_dev.c                |    3 +++
 include/linux/watchdog.h                       |    4 ++++
 4 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/Documentation/watchdog/watchdog-kernel-api.txt b/Documentation/watchdog/watchdog-kernel-api.txt
index 829955b..4f7c894 100644
--- a/Documentation/watchdog/watchdog-kernel-api.txt
+++ b/Documentation/watchdog/watchdog-kernel-api.txt
@@ -43,6 +43,8 @@ struct watchdog_device {
 	const struct watchdog_ops *ops;
 	unsigned int bootstatus;
 	unsigned int timeout;
+	unsigned int min_timeout;
+	unsigned int max_timeout;
 	void *driver_data;
 	unsigned long status;
 };
@@ -52,6 +54,8 @@ It contains following fields:
   additional information about the watchdog timer itself. (Like it's unique name)
 * ops: a pointer to the list of watchdog operations that the watchdog supports.
 * timeout: the watchdog timer's timeout value (in seconds).
+* min_timeout: the watchdog timer's minimum timeout value (in seconds).
+* max_timeout: the watchdog timer's maximum timeout value (in seconds).
 * bootstatus: status of the device after booting (reported with watchdog
   WDIOF_* status bits).
 * driver_data: a pointer to the drivers private data of a watchdog device.
diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 47fc126..cfa1a15 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -59,6 +59,16 @@ int watchdog_register_device(struct watchdog_device *wdd)
 		return -EINVAL;
 
 	/*
+	 * Check that we have valid min and max timeout values, if
+	 * not reset them both to 0 (=not used or unknown)
+	 */
+	if (wdd->min_timeout > wdd->max_timeout) {
+		pr_info("Invalid min and max timeout values, resetting to 0!\n");
+		wdd->min_timeout = 0;
+		wdd->max_timeout = 0;
+	}
+
+	/*
 	 * Note: now that all watchdog_device data has been verified, we
 	 * will not check this anymore in other functions. If data gets
 	 * corrupted in a later stage then we expect a kernel panic!
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index e7134a5..d33520d 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -220,6 +220,9 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd,
 			return -EOPNOTSUPP;
 		if (get_user(val, p))
 			return -EFAULT;
+		if ((wdd->max_timeout != 0) &&
+		    (val < wdd->min_timeout || val > wdd->max_timeout))
+				return -EINVAL;
 		err = wdd->ops->set_timeout(wdd, val);
 		if (err < 0)
 			return err;
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
index 325d90b..111843f 100644
--- a/include/linux/watchdog.h
+++ b/include/linux/watchdog.h
@@ -95,6 +95,8 @@ struct watchdog_ops {
  * @ops:	Pointer to the list of watchdog operations.
  * @bootstatus:	Status of the watchdog device at boot.
  * @timeout:	The watchdog devices timeout value.
+ * @min_timeout:The watchdog devices minimum timeout value.
+ * @max_timeout:The watchdog devices maximum timeout value.
  * @driver-data:Pointer to the drivers private data.
  * @status:	Field that contains the devices internal status bits.
  *
@@ -109,6 +111,8 @@ struct watchdog_device {
 	const struct watchdog_ops *ops;
 	unsigned int bootstatus;
 	unsigned int timeout;
+	unsigned int min_timeout;
+	unsigned int max_timeout;
 	void *driver_data;
 	unsigned long status;
 /* Bit numbers for status flags */
-- 
1.7.6


  parent reply	other threads:[~2011-07-27 20:17 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-11 13:50 [PATCH 0/11 v3] Generic Watchdog Timer Driver Wim Van Sebroeck
2011-07-11 14:19 ` [PATCH 01/11] watchdog: WatchDog Timer Driver Core - Add basic framework Wim Van Sebroeck
2011-07-11 14:21   ` [PATCH 02/11] watchdog: WatchDog Timer Driver Core - Add basic ioctl functionality Wim Van Sebroeck
2011-07-11 21:32     ` Wolfram Sang
2011-07-11 14:21   ` [PATCH 03/11] watchdog: WatchDog Timer Driver Core - Add WDIOC_KEEPALIVE ioctl Wim Van Sebroeck
2011-07-11 14:22   ` [PATCH 04/11] watchdog: WatchDog Timer Driver Core - Add WDIOC_SETOPTIONS ioctl Wim Van Sebroeck
2011-07-11 21:32     ` Wolfram Sang
2011-07-22 19:26       ` Wim Van Sebroeck
2011-07-11 14:22   ` [PATCH 05/11] watchdog: WatchDog Timer Driver Core - Add WDIOC_SETTIMEOUT and WDIOC_GETTIMEOUT ioctl Wim Van Sebroeck
2011-07-11 21:34     ` Wolfram Sang
2011-07-11 14:22   ` [PATCH 06/11] watchdog: WatchDog Timer Driver Core - Add Magic Close feature Wim Van Sebroeck
2011-07-11 21:35     ` Wolfram Sang
2011-07-11 14:23   ` [PATCH 07/11] watchdog: WatchDog Timer Driver Core - Add nowayout feature Wim Van Sebroeck
2011-07-11 14:23   ` [PATCH 09/11] watchdog: WatchDog Timer Driver Core - Add ioctl call Wim Van Sebroeck
2011-07-11 14:24   ` [PATCH 08/11] watchdog: WatchDog Timer Driver Core - Add parent device Wim Van Sebroeck
2011-07-11 14:24   ` [PATCH 10/11] watchdog: WatchDog Timer Driver Core - Add minimum and max timeout Wim Van Sebroeck
2011-07-11 14:24   ` [PATCH 11/11] watchdog: WatchDog Timer Driver Core - Remove llseek Wim Van Sebroeck
2011-07-11 21:35     ` Wolfram Sang
2011-07-11 21:48       ` Arnd Bergmann
2011-07-11 21:32   ` [PATCH 01/11] watchdog: WatchDog Timer Driver Core - Add basic framework Wolfram Sang
2011-07-11 23:02     ` Lars-Peter Clausen
2011-07-22 19:24     ` Wim Van Sebroeck
2011-07-11 23:00   ` Lars-Peter Clausen
2011-07-11 23:53     ` Mark Brown
2011-07-12  9:24     ` Alan Cox
2011-07-22 19:32     ` Wim Van Sebroeck
2011-07-24  3:58       ` Lars-Peter Clausen
2011-07-27 20:24         ` Wim Van Sebroeck
2011-07-29  9:24           ` Lars-Peter Clausen
2011-08-04 20:25             ` Wim Van Sebroeck
2011-07-11 21:31 ` [PATCH 0/11 v3] Generic Watchdog Timer Driver Wolfram Sang
2011-07-22 19:18   ` Wim Van Sebroeck
2011-07-22 19:38     ` Wim Van Sebroeck
2011-07-27 20:15       ` [PATCH 0/9 v4] " Wim Van Sebroeck
2011-07-27 20:16         ` [PATCH 1/9] watchdog: WatchDog Timer Driver Core - Add basic framework Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 2/9] watchdog: WatchDog Timer Driver Core - Add basic ioctl functionality Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 3/9] watchdog: WatchDog Timer Driver Core - Add WDIOC_KEEPALIVE ioctl Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 4/9] watchdog: WatchDog Timer Driver Core - Add WDIOC_SETOPTIONS ioctl Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 5/9] watchdog: WatchDog Timer Driver Core - Add WDIOC_SETTIMEOUT and WDIOC_GETTIMEOUT ioctl Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 6/9] watchdog: WatchDog Timer Driver Core - Add Magic Close feature Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 7/9] watchdog: WatchDog Timer Driver Core - Add nowayout feature Wim Van Sebroeck
2011-07-27 20:16           ` [PATCH 8/9] watchdog: WatchDog Timer Driver Core - Add ioctl call Wim Van Sebroeck
2011-07-27 20:16           ` Wim Van Sebroeck [this message]
2011-07-28 21:29           ` [PATCH 1/9] watchdog: WatchDog Timer Driver Core - Add basic framework Joe Perches
2011-07-30  8:40             ` Arnd Bergmann
2011-07-12 18:43 ` [PATCH 0/11 v3] Generic Watchdog Timer Driver Arnd Bergmann
2011-07-22 20:48 ` Arnaud Lacombe
2011-07-22 21:31   ` Wim Van Sebroeck

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=1311797800-2706-9-git-send-email-wim@iguana.be \
    --to=wim@iguana.be \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=arnd@arndb.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=w.sang@pengutronix.de \
    /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

all inboxes | Powered by JetHome®