• Curtis Klein's avatar
    watchdog: Add hrtimer-based pretimeout feature · 7b7d2fdc
    Curtis Klein authored
    This adds the option to use a hrtimer to generate a watchdog pretimeout
    event for hardware watchdogs that do not natively support watchdog
    pretimeouts.
    
    With this enabled, all watchdogs will appear to have pretimeout support
    in userspace. If no pretimeout value is set, there will be no change in
    the watchdog's behavior. If a pretimeout value is set for a specific
    watchdog that does not have built-in pretimeout support, a timer will be
    started that should fire at the specified time before the watchdog
    timeout would occur. When the watchdog is successfully pinged, the timer
    will be restarted. If the timer is allowed to fire it will generate a
    pretimeout event. However because a software timer is used, it may not
    be able to fire in every circumstance.
    
    If the watchdog does support a pretimeout natively, that functionality
    will be used instead of the hrtimer.
    
    The general design of this feaure was inspired by the software watchdog,
    specifically its own pretimeout implementation. However the software
    watchdog and this feature are completely independent. They can be used
    together; with or without CONFIG_SOFT_WATCHDOG_PRETIMEOUT enabled.
    
    The main advantage of using the hrtimer pretimeout with a hardware
    watchdog, compared to running the software watchdog with a hardware
    watchdog, is that if the hardware watchdog driver is unable to ping the
    watchdog (e.g. due to a bus or communication error), then the hrtimer
    pretimeout would still fire whereas the software watchdog would not.
    Signed-off-by: default avatarCurtis Klein <curtis.klein@hpe.com>
    Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/1612383090-27110-1-git-send-email-curtis.klein@hpe.comSigned-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarWim Van Sebroeck <wim@linux-watchdog.org>
    7b7d2fdc
watchdog_dev.c 30.8 KB