aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDietmar Hahn <dietmar.hahn@ts.fujitsu.com>2012-02-29 13:51:42 +0000
committerDietmar Hahn <dietmar.hahn@ts.fujitsu.com>2012-02-29 13:51:42 +0000
commit9e459f88d10b7a81c9153542dc267c4560dcbcf1 (patch)
tree35b2b5cfc914cd1533d7ec3e6d99de3e889fcb15
parentf3ff1b2db447cf9fbe5005faf0f20ab911661863 (diff)
downloadxen-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.c10
-rw-r--r--xen/arch/x86/hvm/vmx/vpmu_core2.c6
-rw-r--r--xen/arch/x86/hvm/vpmu.c9
-rw-r--r--xen/include/asm-x86/hvm/vpmu.h1
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);