KVM: x86: workaround SuSE's 2.6.16 pvclock vs masterclock issue
authorMarcelo Tosatti <mtosatti@redhat.com>
Tue, 20 Jan 2015 17:54:52 +0000 (15:54 -0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 20 Jan 2015 19:38:39 +0000 (20:38 +0100)
commit54750f2cf042c42b4223d67b1bd20138464bde0e
treee7914883c6452ee68f2b8f7e583db12d2afbe955
parent69b0049a89ad418cd68aa59e7f1e6619a04a4a6f
KVM: x86: workaround SuSE's 2.6.16 pvclock vs masterclock issue

SuSE's 2.6.16 kernel fails to boot if the delta between tsc_timestamp
and rdtsc is larger than a given threshold:

 * If we get more than the below threshold into the future, we rerequest
 * the real time from the host again which has only little offset then
 * that we need to adjust using the TSC.
 *
 * For now that threshold is 1/5th of a jiffie. That should be good
 * enough accuracy for completely broken systems, but also give us swing
 * to not call out to the host all the time.
 */
#define PVCLOCK_DELTA_MAX ((1000000000ULL / HZ) / 5)

Disable masterclock support (which increases said delta) in case the
boot vcpu does not use MSR_KVM_SYSTEM_TIME_NEW.

Upstreams kernels which support pvclock vsyscalls (and therefore make
use of PVCLOCK_STABLE_BIT) use MSR_KVM_SYSTEM_TIME_NEW.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c