|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v4 12/30] KVM: x86: Use get_kvmclock_base_ns() as fallback in get_kvmclock()
From: David Woodhouse <dwmw@xxxxxxxxxxxx>
If kvm_get_walltime_and_clockread() fails unexpectedly (the WARN case),
restart the seqcount loop rather than falling back to a raw rdtsc()
which would set KVM_CLOCK_TSC_STABLE without KVM_CLOCK_REALTIME.
That code path could never actually be reached in practice: on 64-bit
hosts, use_master_clock can only be true when the clocksource is
TSC-based, and on 32-bit hosts, use_master_clock is never set. But
the fallback to raw rdtsc() was misleading and the resulting flags
combination was inconsistent.
Signed-off-by: David Woodhouse <dwmw@xxxxxxxxxxxx>
---
arch/x86/kvm/x86.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 9b395c00ccf2..f2653eaccdf8 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3225,7 +3225,8 @@ static void get_kvmclock(struct kvm *kvm, struct
kvm_clock_data *data)
data->realtime = ts.tv_nsec + NSEC_PER_SEC *
ts.tv_sec;
data->flags |= KVM_CLOCK_REALTIME |
KVM_CLOCK_HOST_TSC;
} else if
(WARN_ON_ONCE(!read_seqcount_retry(&ka->pvclock_sc, seq))) {
- data->host_tsc = rdtsc();
+ put_cpu();
+ continue;
}
#else
data->host_tsc = rdtsc();
--
2.51.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |