• Rasmus Villemoes's avatar
    watchdog: make the device time out at open_deadline when open_timeout is used · c2eac35b
    Rasmus Villemoes authored
    When the watchdog device is not open by userspace, the kernel takes
    care of pinging it. When the open_timeout feature is in use, we should
    ensure that the hardware fires close to open_timeout seconds after the
    kernel has assumed responsibility for the device.
    
    To do this, simply reuse the logic that is already in place for
    ensuring the same thing when userspace is responsible for regularly
    pinging the device:
    
    - When watchdog_active(wdd), this patch doesn't change anything.
    
    - When !watchdog_active(wdd), the "virtual timeout" should be taken to
    be ->open_deadline". When the open_timeout feature is not used or the
    device has been opened at least once, ->open_deadline is KTIME_MAX,
    and the arithmetic ends up returning keepalive_interval as we used to.
    
    This has been tested on a Wandboard with various combinations of
    open_timeout and timeout-sec properties for the on-board watchdog by
    booting with 'init=/bin/sh', timestamping the lines on the serial
    console, and comparing the timestamp of the 'imx2-wdt 20bc000.wdog:
    timeout nnn sec' line with the timestamp of the 'U-Boot SPL ...'
    line (which appears just after reset).
    Suggested-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarRasmus Villemoes <rasmus.villemoes@prevas.dk>
    Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarWim Van Sebroeck <wim@linux-watchdog.org>
    c2eac35b
watchdog_dev.c 30.5 KB