KVM: VMX: initialize TSC offset relative to vm creation time
authorMarcelo Tosatti <mtosatti@redhat.com>
Thu, 11 Dec 2008 19:45:05 +0000 (20:45 +0100)
committerAvi Kivity <avi@redhat.com>
Tue, 24 Mar 2009 09:02:53 +0000 (11:02 +0200)
commit53f658b3c33616a4997ee254311b335e59063289
treefbef1e51bfa096dd28a00b2449d567f2c3ab6fb9
parente8c4a4e8a7cc047dfb3c26b2cbc8599ad3460364
KVM: VMX: initialize TSC offset relative to vm creation time

VMX initializes the TSC offset for each vcpu at different times, and
also reinitializes it for vcpus other than 0 on APIC SIPI message.

This bug causes the TSC's to appear unsynchronized in the guest, even if
the host is good.

Older Linux kernels don't handle the situation very well, so
gettimeofday is likely to go backwards in time:

http://www.mail-archive.com/kvm@vger.kernel.org/msg02955.html
http://sourceforge.net/tracker/index.php?func=detail&aid=2025534&group_id=180599&atid=893831

Fix it by initializating the offset of each vcpu relative to vm creation
time, and moving it from vmx_vcpu_reset to vmx_vcpu_setup, out of the
APIC MP init path.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/vmx.c
arch/x86/kvm/x86.c