Merge tag 'please-pull-mce' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras
[pandora-kernel.git] / kernel / watchdog.c
index df30ee0..e5e1d85 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;