Merge branch 'misc.namei' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-microblaze.git] / arch / arm64 / kvm / pmu-emul.c
index f33825c..f5065f2 100644 (file)
@@ -373,7 +373,6 @@ static u64 kvm_pmu_overflow_status(struct kvm_vcpu *vcpu)
                reg = __vcpu_sys_reg(vcpu, PMOVSSET_EL0);
                reg &= __vcpu_sys_reg(vcpu, PMCNTENSET_EL0);
                reg &= __vcpu_sys_reg(vcpu, PMINTENSET_EL1);
-               reg &= kvm_pmu_valid_counter_mask(vcpu);
        }
 
        return reg;
@@ -564,20 +563,21 @@ void kvm_pmu_software_increment(struct kvm_vcpu *vcpu, u64 val)
  */
 void kvm_pmu_handle_pmcr(struct kvm_vcpu *vcpu, u64 val)
 {
-       unsigned long mask = kvm_pmu_valid_counter_mask(vcpu);
        int i;
 
        if (val & ARMV8_PMU_PMCR_E) {
                kvm_pmu_enable_counter_mask(vcpu,
-                      __vcpu_sys_reg(vcpu, PMCNTENSET_EL0) & mask);
+                      __vcpu_sys_reg(vcpu, PMCNTENSET_EL0));
        } else {
-               kvm_pmu_disable_counter_mask(vcpu, mask);
+               kvm_pmu_disable_counter_mask(vcpu,
+                      __vcpu_sys_reg(vcpu, PMCNTENSET_EL0));
        }
 
        if (val & ARMV8_PMU_PMCR_C)
                kvm_pmu_set_counter_value(vcpu, ARMV8_PMU_CYCLE_IDX, 0);
 
        if (val & ARMV8_PMU_PMCR_P) {
+               unsigned long mask = kvm_pmu_valid_counter_mask(vcpu);
                mask &= ~BIT(ARMV8_PMU_CYCLE_IDX);
                for_each_set_bit(i, &mask, 32)
                        kvm_pmu_set_counter_value(vcpu, i, 0);
@@ -745,7 +745,7 @@ int kvm_pmu_probe_pmuver(void)
        struct perf_event_attr attr = { };
        struct perf_event *event;
        struct arm_pmu *pmu;
-       int pmuver = 0xf;
+       int pmuver = ID_AA64DFR0_PMUVER_IMP_DEF;
 
        /*
         * Create a dummy event that only counts user cycles. As we'll never
@@ -770,7 +770,7 @@ int kvm_pmu_probe_pmuver(void)
        if (IS_ERR(event)) {
                pr_err_once("kvm: pmu event creation failed %ld\n",
                            PTR_ERR(event));
-               return 0xf;
+               return ID_AA64DFR0_PMUVER_IMP_DEF;
        }
 
        if (event->pmu) {
@@ -923,7 +923,7 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)
        if (!vcpu->kvm->arch.pmuver)
                vcpu->kvm->arch.pmuver = kvm_pmu_probe_pmuver();
 
-       if (vcpu->kvm->arch.pmuver == 0xf)
+       if (vcpu->kvm->arch.pmuver == ID_AA64DFR0_PMUVER_IMP_DEF)
                return -ENODEV;
 
        switch (attr->attr) {