# HG changeset patch # User Keir Fraser # Date 1260776704 0 # Node ID 2d072636c4f8b80ac62f49aaeabb04fcdf74760c # Parent b928797213ac6066e8e2a11326857ba718b18a59 Pvrdtscp: move write_rdtscp_aux() to paravirt_ctxt_switch_to() - Currently write_rdtscp_aux() is placed in update_vcpu_system_time(), which is called by schedule() before context_switch(). This will break the HVM guest TSC_AUX state because at this point, MSR hasn't beed saved for HVM guests.So put the function in the point when a PV vcpu is really scheduled in. Signed-off-by: Dongxiao Xu diff -r b928797213ac -r 2d072636c4f8 xen/arch/x86/domain.c --- a/xen/arch/x86/domain.c Fri Dec 11 09:17:09 2009 +0000 +++ b/xen/arch/x86/domain.c Mon Dec 14 07:45:04 2009 +0000 @@ -1298,6 +1298,10 @@ static void paravirt_ctxt_switch_to(stru write_debugreg(6, v->arch.guest_context.debugreg[6]); write_debugreg(7, v->arch.guest_context.debugreg[7]); } + + if ( (v->domain->arch.tsc_mode == TSC_MODE_PVRDTSCP) && + boot_cpu_has(X86_FEATURE_RDTSCP) ) + write_rdtscp_aux(v->domain->arch.incarnation); } /* Update per-VCPU guest runstate shared memory area (if registered). */ diff -r b928797213ac -r 2d072636c4f8 xen/arch/x86/time.c --- a/xen/arch/x86/time.c Fri Dec 11 09:17:09 2009 +0000 +++ b/xen/arch/x86/time.c Mon Dec 14 07:45:04 2009 +0000 @@ -832,10 +832,6 @@ static void __update_vcpu_system_time(st else tsc_stamp = t->local_tsc_stamp; - if ( (d->arch.tsc_mode == TSC_MODE_PVRDTSCP) && - boot_cpu_has(X86_FEATURE_RDTSCP) ) - write_rdtscp_aux(d->arch.incarnation); - /* Don't bother unless timestamps have changed or we are forced. */ if ( !force && (u->tsc_timestamp == tsc_stamp) ) return;