x86, paravirt: don't compute pvclock adjustments if we trust the tsc
If the HV told us we can fully trust the TSC, skip any correction Signed-off-by: Glauber Costa <glommer@redhat.com> Acked-by: Zachary Amsden <zamsden@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
Родитель
838815a787
Коммит
3a0d7256a6
|
@ -21,6 +21,11 @@
|
|||
*/
|
||||
#define KVM_FEATURE_CLOCKSOURCE2 3
|
||||
|
||||
/* The last 8 bits are used to indicate how to interpret the flags field
|
||||
* in pvclock structure. If no bits are set, all flags are ignored.
|
||||
*/
|
||||
#define KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24
|
||||
|
||||
#define MSR_KVM_WALL_CLOCK 0x11
|
||||
#define MSR_KVM_SYSTEM_TIME 0x12
|
||||
|
||||
|
|
|
@ -39,5 +39,6 @@ struct pvclock_wall_clock {
|
|||
u32 nsec;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#define PVCLOCK_TSC_STABLE_BIT (1 << 0)
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _ASM_X86_PVCLOCK_ABI_H */
|
||||
|
|
|
@ -215,4 +215,7 @@ void __init kvmclock_init(void)
|
|||
clocksource_register(&kvm_clock);
|
||||
pv_info.paravirt_enabled = 1;
|
||||
pv_info.name = "KVM";
|
||||
|
||||
if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT))
|
||||
pvclock_set_flags(PVCLOCK_TSC_STABLE_BIT);
|
||||
}
|
||||
|
|
|
@ -135,6 +135,10 @@ cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
|
|||
barrier();
|
||||
} while (version != src->version);
|
||||
|
||||
if ((valid_flags & PVCLOCK_TSC_STABLE_BIT) &&
|
||||
(shadow.flags & PVCLOCK_TSC_STABLE_BIT))
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Assumption here is that last_value, a global accumulator, always goes
|
||||
* forward. If we are less than that, we should not be much smaller.
|
||||
|
|
Загрузка…
Ссылка в новой задаче