aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2011-09-12 05:56:59 -0400
committerWim Van Sebroeck <wim@iguana.be>2012-03-27 14:07:43 -0400
commitb10f7c12e051762b84457f6d38d4b71acbf76a02 (patch)
treeaf001c289eb989fab0198989e4ecdf89d5549a26
parenta5132cafc0a739107e51494b9054c0066802b8cd (diff)
watchdog: watchdog_dev: Let the driver update the timeout field on set_timeout success
When a set_timeout operation succeeds this does not necessarily mean that the exact timeout requested has been achieved, because the watchdog does not necessarily have a 1 second resolution. So rather then have the core set the timeout member of the watchdog_device struct to the exact requested value, instead the driver should set it to the actually achieved timeout value. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
-rw-r--r--Documentation/watchdog/watchdog-kernel-api.txt7
-rw-r--r--drivers/watchdog/watchdog_dev.c1
2 files changed, 4 insertions, 4 deletions
diff --git a/Documentation/watchdog/watchdog-kernel-api.txt b/Documentation/watchdog/watchdog-kernel-api.txt
index 9e162465b0cf..7d9d1da762b6 100644
--- a/Documentation/watchdog/watchdog-kernel-api.txt
+++ b/Documentation/watchdog/watchdog-kernel-api.txt
@@ -117,9 +117,10 @@ they are supported. These optional routines/operations are:
117 status of the device is reported with watchdog WDIOF_* status flags/bits. 117 status of the device is reported with watchdog WDIOF_* status flags/bits.
118* set_timeout: this routine checks and changes the timeout of the watchdog 118* set_timeout: this routine checks and changes the timeout of the watchdog
119 timer device. It returns 0 on success, -EINVAL for "parameter out of range" 119 timer device. It returns 0 on success, -EINVAL for "parameter out of range"
120 and -EIO for "could not write value to the watchdog". On success the timeout 120 and -EIO for "could not write value to the watchdog". On success this
121 value of the watchdog_device will be changed to the value that was just used 121 routine should set the timeout value of the watchdog_device to the
122 to re-program the watchdog timer device. 122 achieved timeout value (which may be different from the requested one
123 because the watchdog does not necessarily has a 1 second resolution).
123 (Note: the WDIOF_SETTIMEOUT needs to be set in the options field of the 124 (Note: the WDIOF_SETTIMEOUT needs to be set in the options field of the
124 watchdog's info structure). 125 watchdog's info structure).
125* ioctl: if this routine is present then it will be called first before we do 126* ioctl: if this routine is present then it will be called first before we do
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 55b1f60b19d2..c6e1b8dd80cc 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -226,7 +226,6 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd,
226 err = wdd->ops->set_timeout(wdd, val); 226 err = wdd->ops->set_timeout(wdd, val);
227 if (err < 0) 227 if (err < 0)
228 return err; 228 return err;
229 wdd->timeout = val;
230 /* If the watchdog is active then we send a keepalive ping 229 /* If the watchdog is active then we send a keepalive ping
231 * to make sure that the watchdog keep's running (and if 230 * to make sure that the watchdog keep's running (and if
232 * possible that it takes the new timeout) */ 231 * possible that it takes the new timeout) */