lkml.org 
[lkml]   [2012]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] Watchdog: Fix for settimeout issue
    From
    Date
    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 */



    \
     
     \ /
      Last update: 2012-04-30 09:21    [W:0.027 / U:29.828 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site