[PATCH] Watchdog: Fix for settimeout issue

April 30th, 2012 - 02:50 am ET by Ashish Jangam | Report spam
Some devices have a fixed minimum elapse time and a ping before this
elapse time causes error condition. This patch fix this issue in the
settimeout operation.

drivers/watchdog/watchdog_dev.c | 7 ++++++-
include/linux/watchdog.h | 3 +++
2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 8558da9..fb6076c 100644
a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -41,6 +41,7 @@
#include <linux/miscdevice.h> /* For handling misc devices */
#include <linux/init.h> /* For __init/__exit/... */
#include <linux/uaccess.h> /* For copy_to_user/put_user/... */
+#include <linux/delay.h> /* For delay (like mdelay) */

/* make sure we only register one /dev/watchdog device */
static unsigned long watchdog_dev_busy;
@@ -228,7 +229,11 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd,
return err;
/* If the watchdog is active then we send a keepalive ping
* to make sure that the watchdog keep's running (and if
- * possible that it takes the new timeout) */
+ * possible that it takes the new timeout) Also we care
+ * for watchdog which needs min elapse time before a ping.
+ */
+ if (wdd->min_elapse_time)
+ mdelay(wdd->min_elapse_time);
watchdog_ping(wdd);
/* Fall */
case WDIOC_GETTIMEOUT:
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
index ac40716..37d25b8 100644
a/include/linux/watchdog.h
+++ b/include/linux/watchdog.h
@@ -95,6 +95,8 @@ struct watchdog_ops {
* @timeout: The watchdog devices timeout value.
* @min_timeout:The watchdog devices minimum timeout value.
* @max_timeout:The watchdog devices maximum timeout value.
+ * @min_elapse_time: The watchdog devices minimum elapse time before
+ * the ping.
* @driver-data:Pointer to the drivers private data.
* @status: Field that contains the devices internal status bits.
*
@@ -111,6 +113,7 @@ struct watchdog_device {
unsigned int timeout;
unsigned int min_timeout;
unsigned int max_timeout;
+ unsigned int min_elapse_time;
void *driver_data;
unsigned long status;
/* Bit numbers for status flags */


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
email Follow the discussionReplies 2 repliesReplies Make a reply

Replies

#1 Wim Van Sebroeck
May 23rd, 2012 - 02:40 pm ET | Report spam
Hi Ashish,

Some devices have a fixed minimum elapse time and a ping before this
elapse time causes error condition. This patch fix this issue in the
settimeout operation.



Won't add this patch. The driver needs to take care of the mdelay.
PS: for da9052_wdt: start (=set_timeout) + ping will also give you
the same problem.

Kind regards,
Wim.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Similar topics