[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 02/19] VPMU: Mark context LOADED before registers are loaded
On 06/06/14 18:39, Boris Ostrovsky wrote: > Because a PMU interrupt may be generated as soon as PMU registers are loaded > (or, > more precisely, as soon as HW PMU is "armed") we don't want to delay marking > context as LOADED until after registers are loaded. Otherwise during interrupt > handling VPMU_CONTEXT_LOADED may not be set and this could be confusing. > > (Technically, only SVM needs this change right now since VMX will "arm" PMU > later, > during VMRUN when global control register is loaded from VMCS. However, both > AMD and Intel code will require this patch when we introduce PV VPMU). > > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> > Acked-by: Kevin Tian <kevin.tian@xxxxxxxxx> > Reviewed-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxx> > Tested-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > xen/arch/x86/hvm/svm/vpmu.c | 2 ++ > xen/arch/x86/hvm/vmx/vpmu_core2.c | 2 ++ > xen/arch/x86/hvm/vpmu.c | 3 +-- > 3 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/hvm/svm/vpmu.c b/xen/arch/x86/hvm/svm/vpmu.c > index 66a3815..3ac7d53 100644 > --- a/xen/arch/x86/hvm/svm/vpmu.c > +++ b/xen/arch/x86/hvm/svm/vpmu.c > @@ -203,6 +203,8 @@ static void amd_vpmu_load(struct vcpu *v) > return; > } > > + vpmu_set(vpmu, VPMU_CONTEXT_LOADED); > + > context_load(v); > } > > diff --git a/xen/arch/x86/hvm/vmx/vpmu_core2.c > b/xen/arch/x86/hvm/vmx/vpmu_core2.c > index 3129ebd..ccd14d9 100644 > --- a/xen/arch/x86/hvm/vmx/vpmu_core2.c > +++ b/xen/arch/x86/hvm/vmx/vpmu_core2.c > @@ -369,6 +369,8 @@ static void core2_vpmu_load(struct vcpu *v) > if ( vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED) ) > return; > > + vpmu_set(vpmu, VPMU_CONTEXT_LOADED); > + > __core2_vpmu_load(v); > } > > diff --git a/xen/arch/x86/hvm/vpmu.c b/xen/arch/x86/hvm/vpmu.c > index 21fbaba..63765fa 100644 > --- a/xen/arch/x86/hvm/vpmu.c > +++ b/xen/arch/x86/hvm/vpmu.c > @@ -211,10 +211,9 @@ void vpmu_load(struct vcpu *v) > if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->arch_vpmu_load ) > { > apic_write_around(APIC_LVTPC, vpmu->hw_lapic_lvtpc); > + /* Arch code needs to set VPMU_CONTEXT_LOADED */ > vpmu->arch_vpmu_ops->arch_vpmu_load(v); > } > - > - vpmu_set(vpmu, VPMU_CONTEXT_LOADED); > } > > void vpmu_initialise(struct vcpu *v) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |