On Wed, May 07, 2008 at 05:01:02PM -0500, Ryan Harper wrote: > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > index 5528121..c919ddd 100644 > --- a/arch/x86/kvm/svm.c > +++ b/arch/x86/kvm/svm.c > @@ -685,8 +685,14 @@ static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu) > * increasing TSC. > */ > rdtscll(tsc_this); > - delta = vcpu->arch.host_tsc - tsc_this; > - svm->vmcb->control.tsc_offset += delta; > + /* we only need to adjust this if the old tsc was ahead > + * also, we'll generate a massively large u64 value if > + * tsc_this is less than host_tsc because of unsigned math > + */ > + if (tsc_this < vcpu->arch.host_tsc) { > + delta = vcpu->arch.host_tsc - tsc_this; > + svm->vmcb->control.tsc_offset += delta; > + } > vcpu->cpu = cpu; > kvm_migrate_apic_timer(vcpu); > }
Hmm, I think this can result in inaccurate guest time because it makes the tsc hopping. Does it fix the problem when you make delta an s64? Joerg -- | AMD Saxony Limited Liability Company & Co. KG Operating | Wilschdorfer Landstr. 101, 01109 Dresden, Germany System | Register Court Dresden: HRA 4896 Research | General Partner authorized to represent: Center | AMD Saxony LLC (Wilmington, Delaware, US) | General Manager of AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel