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

Reply via email to