mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
watchdog: add pretimeout support to the core
Since the watchdog framework centrializes the IOCTL interfaces of device drivers now, SETPRETIMEOUT and GETPRETIMEOUT need to be added in the common code. Signed-off-by: Robin Gong <[email protected]> Signed-off-by: Wolfram Sang <[email protected]> [vzapolskiy: added conditional pretimeout sysfs attribute visibility] Signed-off-by: Vladimir Zapolskiy <[email protected]> Reviewed-by: Guenter Roeck <[email protected]> Signed-off-by: Guenter Roeck <[email protected]> Signed-off-by: Wim Van Sebroeck <[email protected]>
This commit is contained in:
parent
68d4cb809e
commit
df044e0220
3 changed files with 85 additions and 2 deletions
|
|
@ -50,6 +50,7 @@ struct watchdog_device {
|
|||
const struct watchdog_ops *ops;
|
||||
unsigned int bootstatus;
|
||||
unsigned int timeout;
|
||||
unsigned int pretimeout;
|
||||
unsigned int min_timeout;
|
||||
unsigned int max_timeout;
|
||||
unsigned int min_hw_heartbeat_ms;
|
||||
|
|
@ -77,6 +78,7 @@ It contains following fields:
|
|||
* timeout: the watchdog timer's timeout value (in seconds).
|
||||
This is the time after which the system will reboot if user space does
|
||||
not send a heartbeat request if WDOG_ACTIVE is set.
|
||||
* pretimeout: the watchdog timer's pretimeout value (in seconds).
|
||||
* min_timeout: the watchdog timer's minimum timeout value (in seconds).
|
||||
If set, the minimum configurable value for 'timeout'.
|
||||
* max_timeout: the watchdog timer's maximum timeout value (in seconds),
|
||||
|
|
@ -121,6 +123,7 @@ struct watchdog_ops {
|
|||
int (*ping)(struct watchdog_device *);
|
||||
unsigned int (*status)(struct watchdog_device *);
|
||||
int (*set_timeout)(struct watchdog_device *, unsigned int);
|
||||
int (*set_pretimeout)(struct watchdog_device *, unsigned int);
|
||||
unsigned int (*get_timeleft)(struct watchdog_device *);
|
||||
int (*restart)(struct watchdog_device *);
|
||||
void (*ref)(struct watchdog_device *) __deprecated;
|
||||
|
|
@ -188,6 +191,23 @@ they are supported. These optional routines/operations are:
|
|||
If set_timeout is not provided but, WDIOF_SETTIMEOUT is set, the watchdog
|
||||
infrastructure updates the timeout value of the watchdog_device internally
|
||||
to the requested value.
|
||||
If the pretimeout feature is used (WDIOF_PRETIMEOUT), then set_timeout must
|
||||
also take care of checking if pretimeout is still valid and set up the timer
|
||||
accordingly. This can't be done in the core without races, so it is the
|
||||
duty of the driver.
|
||||
* set_pretimeout: this routine checks and changes the pretimeout value of
|
||||
the watchdog. It is optional because not all watchdogs support pretimeout
|
||||
notification. The timeout value is not an absolute time, but the number of
|
||||
seconds before the actual timeout would happen. It returns 0 on success,
|
||||
-EINVAL for "parameter out of range" and -EIO for "could not write value to
|
||||
the watchdog". A value of 0 disables pretimeout notification.
|
||||
(Note: the WDIOF_PRETIMEOUT needs to be set in the options field of the
|
||||
watchdog's info structure).
|
||||
If the watchdog driver does not have to perform any action but setting the
|
||||
watchdog_device.pretimeout, this callback can be omitted. That means if
|
||||
set_pretimeout is not provided but WDIOF_PRETIMEOUT is set, the watchdog
|
||||
infrastructure updates the pretimeout value of the watchdog_device internally
|
||||
to the requested value.
|
||||
* get_timeleft: this routines returns the time that's left before a reset.
|
||||
* restart: this routine restarts the machine. It returns 0 on success or a
|
||||
negative errno code for failure.
|
||||
|
|
|
|||
Loading…
Reference in a new issue