From mboxrd@z Thu Jan 1 00:00:00 1970 From: Denis Plotnikov Subject: [PATCH v2 11/11] KVM: add pvclock to a list of stable clocks. Date: Fri, 21 Jul 2017 18:45:18 +0300 Message-ID: <1500651918-14156-12-git-send-email-dplotnikov@virtuozzo.com> References: <1500651918-14156-1-git-send-email-dplotnikov@virtuozzo.com> Cc: pbonzini@redhat.com, den@virtuozzo.com, rkagan@virtuozzo.com To: kvm@vger.kernel.org, rkrcmar@redhat.com Return-path: Received: from mailhub.sw.ru ([195.214.232.25]:13820 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750802AbdGUPpf (ORCPT ); Fri, 21 Jul 2017 11:45:35 -0400 In-Reply-To: <1500651918-14156-1-git-send-email-dplotnikov@virtuozzo.com> Sender: kvm-owner@vger.kernel.org List-ID: This means allow to L2 guests to use masterclock when L1 has a stable pvclock (currenly, kvm-clock) Signed-off-by: Denis Plotnikov --- arch/x86/kernel/pvclock.c | 1 + arch/x86/kvm/x86.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index c73e5a5..d6bef69 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -73,6 +73,7 @@ u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src) return flags & valid_flags; } +EXPORT_SYMBOL(pvclock_read_flags); static atomic64_t clocksource_stable = ATOMIC64_INIT(0); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ce491bb..9b0f306 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1311,9 +1311,17 @@ static u64 compute_guest_tsc(struct kvm_vcpu *vcpu, s64 kernel_ns) } #ifdef CONFIG_X86_64 +static bool pvclock_stable(void) +{ + return !!(pvclock_read_flags(&pvclock_pvti_cpu0_va()->pvti) + & PVCLOCK_TSC_STABLE_BIT); +} + static bool clocksource_stable(void) { - return get_tk_mono_clock_mode() == VCLOCK_TSC; + return get_tk_mono_clock_mode() == VCLOCK_TSC || + (get_tk_mono_clock_mode() == VCLOCK_PVCLOCK + && pvclock_stable()); } static bool clocksource_stability_check(void) -- 2.7.4