diff options
author | Bo Tu <tubo@linux.vnet.ibm.com> | 2016-01-19 08:45:19 +0100 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2016-01-27 15:34:47 +0100 |
commit | fba9110fee9fc438cfd9b6c1091bfda8710875b5 (patch) | |
tree | 1ba3abdeaf66519aac9257c0c9193cec0863017e | |
parent | 0d035b6c5e8292b02045c372eea248298c0f2f62 (diff) |
watchdog/diag288: don't reset for action=none|debug|pause
If the watchdog expires and the guest is not notified (NONE, DEBUG, PAUSE),
we must not reset the watchdog device, otherwise watchdog_ping() and
watchdog_stop() will fail when triggered by the guest. This reset behavior
matches to the z/VM behavior when a custom command is to be executed
on expiry.
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Bo Tu <tubo@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
-rw-r--r-- | hw/watchdog/wdt_diag288.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/hw/watchdog/wdt_diag288.c b/hw/watchdog/wdt_diag288.c index 2a885a447c..ddda723906 100644 --- a/hw/watchdog/wdt_diag288.c +++ b/hw/watchdog/wdt_diag288.c @@ -51,6 +51,13 @@ static void diag288_timer_expired(void *dev) { qemu_log_mask(CPU_LOG_RESET, "Watchdog timer expired.\n"); watchdog_perform_action(); + /* Reset the watchdog only if the guest was notified about expiry. */ + switch (get_watchdog_action()) { + case WDT_DEBUG: + case WDT_NONE: + case WDT_PAUSE: + return; + } wdt_diag288_reset(dev); } |