diff options
author | Boris Ostrovsky <boris.ostrovsky@oracle.com> | 2013-04-15 11:26:44 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-04-15 11:26:44 +0200 |
commit | 426368be82b0184df1b537bb659680026b747a50 (patch) | |
tree | 8a4869df0df6f2b15ce218a55093efc1003efd30 /xen/arch/x86/hvm/svm | |
parent | c6037adc5c934b9ab97e532415302e50ece962d5 (diff) | |
download | xen-426368be82b0184df1b537bb659680026b747a50.tar.gz xen-426368be82b0184df1b537bb659680026b747a50.tar.bz2 xen-426368be82b0184df1b537bb659680026b747a50.zip |
x86/VPMU: Factor out VPMU common code
Factor out common code from SVM amd VMX into VPMU.
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
Tested-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
Acked-by: Jun Nakajima <jun.nakajima@intel.com>
Diffstat (limited to 'xen/arch/x86/hvm/svm')
-rw-r--r-- | xen/arch/x86/hvm/svm/vpmu.c | 37 |
1 files changed, 0 insertions, 37 deletions
diff --git a/xen/arch/x86/hvm/svm/vpmu.c b/xen/arch/x86/hvm/svm/vpmu.c index 51e5495bc6..f2f2d125fd 100644 --- a/xen/arch/x86/hvm/svm/vpmu.c +++ b/xen/arch/x86/hvm/svm/vpmu.c @@ -87,7 +87,6 @@ static const u32 AMD_F15H_CTRLS[] = { struct amd_vpmu_context { u64 counters[MAX_NUM_COUNTERS]; u64 ctrls[MAX_NUM_COUNTERS]; - u32 hw_lapic_lvtpc; bool_t msr_bitmap_set; }; @@ -171,22 +170,6 @@ static void amd_vpmu_unset_msr_bitmap(struct vcpu *v) static int amd_vpmu_do_interrupt(struct cpu_user_regs *regs) { - struct vcpu *v = current; - struct vlapic *vlapic = vcpu_vlapic(v); - u32 vlapic_lvtpc; - unsigned char int_vec; - - if ( !is_vlapic_lvtpc_enabled(vlapic) ) - return 0; - - vlapic_lvtpc = vlapic_get_reg(vlapic, APIC_LVTPC); - int_vec = vlapic_lvtpc & APIC_VECTOR_MASK; - - if ( GET_APIC_DELIVERY_MODE(vlapic_lvtpc) == APIC_MODE_FIXED ) - vlapic_set_irq(vcpu_vlapic(v), int_vec, 0); - else - v->nmi_pending = 1; - return 1; } @@ -205,17 +188,7 @@ static inline void context_restore(struct vcpu *v) static void amd_vpmu_restore(struct vcpu *v) { - struct vpmu_struct *vpmu = vcpu_vpmu(v); - struct amd_vpmu_context *ctxt = vpmu->context; - - if ( !(vpmu_is_set(vpmu, VPMU_CONTEXT_ALLOCATED) && - vpmu_is_set(vpmu, VPMU_RUNNING)) ) - return; - - apic_write(APIC_LVTPC, ctxt->hw_lapic_lvtpc); context_restore(v); - - vpmu_set(vpmu, VPMU_CONTEXT_LOADED); } static inline void context_save(struct vcpu *v) @@ -237,18 +210,10 @@ static void amd_vpmu_save(struct vcpu *v) struct vpmu_struct *vpmu = vcpu_vpmu(v); struct amd_vpmu_context *ctx = vpmu->context; - if ( !(vpmu_is_set(vpmu, VPMU_CONTEXT_ALLOCATED) && - vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED)) ) - return; - context_save(v); if ( !vpmu_is_set(vpmu, VPMU_RUNNING) && ctx->msr_bitmap_set ) amd_vpmu_unset_msr_bitmap(v); - - ctx->hw_lapic_lvtpc = apic_read(APIC_LVTPC); - apic_write(APIC_LVTPC, ctx->hw_lapic_lvtpc | APIC_LVT_MASKED); - vpmu_reset(vpmu, VPMU_CONTEXT_LOADED); } static void context_update(unsigned int msr, u64 msr_content) @@ -271,8 +236,6 @@ static void context_update(unsigned int msr, u64 msr_content) for ( i = 0; i < num_counters; i++ ) if ( msr == ctrls[i] ) ctxt->ctrls[i] = msr_content; - - ctxt->hw_lapic_lvtpc = apic_read(APIC_LVTPC); } static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content) |