]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - kernel/watchdog.c
watchdog: add check for suspended vm in softlockup detector
[karo-tx-linux.git] / kernel / watchdog.c
index df30ee08bdd42161105a9564871cc80491d0b7aa..e5e1d85b8c7c23090ce59b7e5b1e868535c85ef0 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/sysctl.h>
 
 #include <asm/irq_regs.h>
+#include <linux/kvm_para.h>
 #include <linux/perf_event.h>
 
 int watchdog_enabled = 1;
@@ -280,6 +281,9 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
                        __this_cpu_write(softlockup_touch_sync, false);
                        sched_clock_tick();
                }
+
+               /* Clear the guest paused flag on watchdog reset */
+               kvm_check_and_clear_guest_paused();
                __touch_watchdog();
                return HRTIMER_RESTART;
        }
@@ -292,6 +296,14 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
         */
        duration = is_softlockup(touch_ts);
        if (unlikely(duration)) {
+               /*
+                * If a virtual machine is stopped by the host it can look to
+                * the watchdog like a soft lockup, check to see if the host
+                * stopped the vm before we issue the warning
+                */
+               if (kvm_check_and_clear_guest_paused())
+                       return HRTIMER_RESTART;
+
                /* only warn once */
                if (__this_cpu_read(soft_watchdog_warn) == true)
                        return HRTIMER_RESTART;