Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 261111
b: refs/heads/master
c: 3f43f68
h: refs/heads/master
i:
  261109: 7b13bc4
  261107: 338ddb7
  261103: 959ef31
v: v3
  • Loading branch information
Wim Van Sebroeck committed Jul 28, 2011
1 parent 3abda19 commit 716234e
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 78d88fc01202b088573c962e2885556a5e99bf74
refs/heads/master: 3f43f68e29f1dcb853d70280c7412fc0ef9a0da6
4 changes: 4 additions & 0 deletions trunk/Documentation/watchdog/watchdog-kernel-api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand All @@ -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.
Expand Down
10 changes: 10 additions & 0 deletions trunk/drivers/watchdog/watchdog_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@ int watchdog_register_device(struct watchdog_device *wdd)
if (wdd->ops->start == NULL || wdd->ops->stop == NULL)
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
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/watchdog/watchdog_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions trunk/include/linux/watchdog.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand All @@ -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 */
Expand Down

0 comments on commit 716234e

Please sign in to comment.