diff options
Diffstat (limited to 'arch/x86/kernel/pvclock.c')
| -rw-r--r-- | arch/x86/kernel/pvclock.c | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index a16bae3f83b..2f355d229a5 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -43,6 +43,14 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src)  	return pv_tsc_khz;  } +void pvclock_touch_watchdogs(void) +{ +	touch_softlockup_watchdog_sync(); +	clocksource_touch_watchdog(); +	rcu_cpu_stall_reset(); +	reset_hung_task_detector(); +} +  static atomic64_t last_value = ATOMIC64_INIT(0);  void pvclock_resume(void) @@ -74,6 +82,11 @@ cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)  		version = __pvclock_read_cycles(src, &ret, &flags);  	} while ((src->version & 1) || version != src->version); +	if (unlikely((flags & PVCLOCK_GUEST_STOPPED) != 0)) { +		src->flags &= ~PVCLOCK_GUEST_STOPPED; +		pvclock_touch_watchdogs(); +	} +  	if ((valid_flags & PVCLOCK_TSC_STABLE_BIT) &&  		(flags & PVCLOCK_TSC_STABLE_BIT))  		return ret;  | 
