Message ID | 1461405855-15576-2-git-send-email-zhaoshenglong@huawei.com |
---|---|
State | Superseded |
Headers | show |
On Sat, Apr 23, 2016 at 06:04:13PM +0800, Shannon Zhao wrote: > From: Shannon Zhao <shannon.zhao@linaro.org> > > Check if kvm supports guest PMUv3. If so, set the corresponding feature > bit for vcpu. > > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> > --- > target-arm/cpu-qom.h | 2 ++ > target-arm/kvm64.c | 5 +++++ > 2 files changed, 7 insertions(+) Reviewed-by: Andrew Jones <drjones@redhat.com> > > diff --git a/target-arm/cpu-qom.h b/target-arm/cpu-qom.h > index 1061c08..93aa6a4 100644 > --- a/target-arm/cpu-qom.h > +++ b/target-arm/cpu-qom.h > @@ -105,6 +105,8 @@ typedef struct ARMCPU { > bool powered_off; > /* CPU has security extension */ > bool has_el3; > + /* CPU has PMU (Performance Monitor Unit) */ > + bool has_pmu; > > /* CPU has memory protection unit */ > bool has_mpu; > diff --git a/target-arm/kvm64.c b/target-arm/kvm64.c > index e8527bf..b364789 100644 > --- a/target-arm/kvm64.c > +++ b/target-arm/kvm64.c > @@ -461,6 +461,11 @@ int kvm_arch_init_vcpu(CPUState *cs) > if (!arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) { > cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_EL1_32BIT; > } > + if (kvm_irqchip_in_kernel() && > + kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PMU_V3)) { > + cpu->has_pmu = true; > + cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_PMU_V3; > + } > > /* Do KVM_ARM_VCPU_INIT ioctl */ > ret = kvm_arm_vcpu_init(cs); > -- > 2.0.4 > >
diff --git a/target-arm/cpu-qom.h b/target-arm/cpu-qom.h index 1061c08..93aa6a4 100644 --- a/target-arm/cpu-qom.h +++ b/target-arm/cpu-qom.h @@ -105,6 +105,8 @@ typedef struct ARMCPU { bool powered_off; /* CPU has security extension */ bool has_el3; + /* CPU has PMU (Performance Monitor Unit) */ + bool has_pmu; /* CPU has memory protection unit */ bool has_mpu; diff --git a/target-arm/kvm64.c b/target-arm/kvm64.c index e8527bf..b364789 100644 --- a/target-arm/kvm64.c +++ b/target-arm/kvm64.c @@ -461,6 +461,11 @@ int kvm_arch_init_vcpu(CPUState *cs) if (!arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) { cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_EL1_32BIT; } + if (kvm_irqchip_in_kernel() && + kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PMU_V3)) { + cpu->has_pmu = true; + cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_PMU_V3; + } /* Do KVM_ARM_VCPU_INIT ioctl */ ret = kvm_arm_vcpu_init(cs);