diff options
author | Dietmar Hahn <dietmar.hahn@ts.fujitsu.com> | 2012-02-29 13:51:42 +0000 |
---|---|---|
committer | Dietmar Hahn <dietmar.hahn@ts.fujitsu.com> | 2012-02-29 13:51:42 +0000 |
commit | 9e459f88d10b7a81c9153542dc267c4560dcbcf1 (patch) | |
tree | 35b2b5cfc914cd1533d7ec3e6d99de3e889fcb15 | |
parent | f3ff1b2db447cf9fbe5005faf0f20ab911661863 (diff) | |
download | xen-9e459f88d10b7a81c9153542dc267c4560dcbcf1.tar.gz xen-9e459f88d10b7a81c9153542dc267c4560dcbcf1.tar.bz2 xen-9e459f88d10b7a81c9153542dc267c4560dcbcf1.zip |
vpmu: No need for two initialisation functions
With the changeset 24529:87854d3bed93 we got 2 initialisation
functions for the arch specific stuff. This is no more needed.
Signed-off-by: Dietmar Hahn <dietmar.hahn@ts.fujitsu.com>
Committed-by: Keir Fraser <keir@xen.org>
-rw-r--r-- | xen/arch/x86/hvm/svm/vpmu.c | 10 | ||||
-rw-r--r-- | xen/arch/x86/hvm/vmx/vpmu_core2.c | 6 | ||||
-rw-r--r-- | xen/arch/x86/hvm/vpmu.c | 9 | ||||
-rw-r--r-- | xen/include/asm-x86/hvm/vpmu.h | 1 |
4 files changed, 10 insertions, 16 deletions
diff --git a/xen/arch/x86/hvm/svm/vpmu.c b/xen/arch/x86/hvm/svm/vpmu.c index ee8064c926..9b5fd9ba3f 100644 --- a/xen/arch/x86/hvm/svm/vpmu.c +++ b/xen/arch/x86/hvm/svm/vpmu.c @@ -292,14 +292,14 @@ static int amd_vpmu_do_rdmsr(unsigned int msr, uint64_t *msr_content) return 1; } -static void amd_vpmu_initialise(struct vcpu *v) +static int amd_vpmu_initialise(struct vcpu *v) { struct amd_vpmu_context *ctxt = NULL; struct vpmu_struct *vpmu = vcpu_vpmu(v); uint8_t family = current_cpu_data.x86; if ( vpmu_is_set(vpmu, VPMU_CONTEXT_ALLOCATED) ) - return; + return 0; if ( counters == NULL ) { @@ -329,11 +329,12 @@ static void amd_vpmu_initialise(struct vcpu *v) gdprintk(XENLOG_WARNING, "Insufficient memory for PMU, " " PMU feature is unavailable on domain %d vcpu %d.\n", v->vcpu_id, v->domain->domain_id); - return; + return -ENOMEM; } vpmu->context = (void *)ctxt; vpmu_set(vpmu, VPMU_CONTEXT_ALLOCATED); + return 0; } static void amd_vpmu_destroy(struct vcpu *v) @@ -357,7 +358,6 @@ struct arch_vpmu_ops amd_vpmu_ops = { .do_wrmsr = amd_vpmu_do_wrmsr, .do_rdmsr = amd_vpmu_do_rdmsr, .do_interrupt = amd_vpmu_do_interrupt, - .arch_vpmu_initialise = amd_vpmu_initialise, .arch_vpmu_destroy = amd_vpmu_destroy, .arch_vpmu_save = amd_vpmu_save, .arch_vpmu_load = amd_vpmu_restore @@ -375,7 +375,7 @@ int svm_vpmu_initialise(struct vcpu *v) case 0x14: case 0x15: vpmu->arch_vpmu_ops = &amd_vpmu_ops; - return 0; + return amd_vpmu_initialise(v); } printk("VPMU: Initialization failed. " diff --git a/xen/arch/x86/hvm/vmx/vpmu_core2.c b/xen/arch/x86/hvm/vmx/vpmu_core2.c index e0453e4af1..e9de5a8301 100644 --- a/xen/arch/x86/hvm/vmx/vpmu_core2.c +++ b/xen/arch/x86/hvm/vmx/vpmu_core2.c @@ -583,9 +583,10 @@ static int core2_vpmu_do_interrupt(struct cpu_user_regs *regs) return 1; } -static void core2_vpmu_initialise(struct vcpu *v) +static int core2_vpmu_initialise(struct vcpu *v) { check_pmc_quirk(); + return 0; } static void core2_vpmu_destroy(struct vcpu *v) @@ -607,7 +608,6 @@ struct arch_vpmu_ops core2_vpmu_ops = { .do_wrmsr = core2_vpmu_do_wrmsr, .do_rdmsr = core2_vpmu_do_rdmsr, .do_interrupt = core2_vpmu_do_interrupt, - .arch_vpmu_initialise = core2_vpmu_initialise, .arch_vpmu_destroy = core2_vpmu_destroy, .arch_vpmu_save = core2_vpmu_save, .arch_vpmu_load = core2_vpmu_load @@ -633,7 +633,7 @@ int vmx_vpmu_initialise(struct vcpu *v) case 47: case 58: vpmu->arch_vpmu_ops = &core2_vpmu_ops; - return 0; + return core2_vpmu_initialise(v); } } diff --git a/xen/arch/x86/hvm/vpmu.c b/xen/arch/x86/hvm/vpmu.c index 1c52aad9c6..ed1353266c 100644 --- a/xen/arch/x86/hvm/vpmu.c +++ b/xen/arch/x86/hvm/vpmu.c @@ -88,6 +88,8 @@ void vpmu_initialise(struct vcpu *v) if ( vpmu_is_set(vpmu, VPMU_CONTEXT_ALLOCATED) ) vpmu_destroy(v); + vpmu_clear(vpmu); + vpmu->context = NULL; switch ( vendor ) { @@ -107,13 +109,6 @@ void vpmu_initialise(struct vcpu *v) opt_vpmu_enabled = 0; break; } - - if ( vpmu->arch_vpmu_ops != NULL ) - { - vpmu_clear(vpmu); - vpmu->context = NULL; - vpmu->arch_vpmu_ops->arch_vpmu_initialise(v); - } } void vpmu_destroy(struct vcpu *v) diff --git a/xen/include/asm-x86/hvm/vpmu.h b/xen/include/asm-x86/hvm/vpmu.h index d6ed5f8e4d..f9bec919ad 100644 --- a/xen/include/asm-x86/hvm/vpmu.h +++ b/xen/include/asm-x86/hvm/vpmu.h @@ -40,7 +40,6 @@ struct arch_vpmu_ops { int (*do_wrmsr)(unsigned int msr, uint64_t msr_content); int (*do_rdmsr)(unsigned int msr, uint64_t *msr_content); int (*do_interrupt)(struct cpu_user_regs *regs); - void (*arch_vpmu_initialise)(struct vcpu *v); void (*arch_vpmu_destroy)(struct vcpu *v); void (*arch_vpmu_save)(struct vcpu *v); void (*arch_vpmu_load)(struct vcpu *v); |