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
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel