|
@@ -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;
|