Lines Matching refs:pmu
20 #include "pmu.h"
28 static struct kvm_pmc *amd_pmc_idx_to_pmc(struct kvm_pmu *pmu, int pmc_idx)
30 unsigned int num_counters = pmu->nr_arch_gp_counters;
35 return &pmu->gp_counters[array_index_nospec(pmc_idx, num_counters)];
38 static inline struct kvm_pmc *get_gp_pmc_amd(struct kvm_pmu *pmu, u32 msr,
41 struct kvm_vcpu *vcpu = pmu_to_vcpu(pmu);
73 return amd_pmc_idx_to_pmc(pmu, idx);
83 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
87 return idx < pmu->nr_arch_gp_counters;
99 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
102 pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_COUNTER);
103 pmc = pmc ? pmc : get_gp_pmc_amd(pmu, msr, PMU_TYPE_EVNTSEL);
110 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
114 return pmu->version > 0;
120 return pmu->version > 1;
123 msr < MSR_F15H_PERF_CTL0 + 2 * pmu->nr_arch_gp_counters)
124 return pmu->version > 1;
133 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
138 pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_COUNTER);
144 pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_EVNTSEL);
155 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
161 pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_COUNTER);
168 pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_EVNTSEL);
170 data &= ~pmu->reserved_bits;
183 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
186 pmu->version = 1;
188 pmu->version = 2;
196 pmu->nr_arch_gp_counters = ebx.split.num_core_pmc;
198 pmu->nr_arch_gp_counters = AMD64_NUM_COUNTERS_CORE;
200 pmu->nr_arch_gp_counters = AMD64_NUM_COUNTERS;
203 pmu->nr_arch_gp_counters = min_t(unsigned int, pmu->nr_arch_gp_counters,
206 if (pmu->version > 1) {
207 pmu->global_ctrl_mask = ~((1ull << pmu->nr_arch_gp_counters) - 1);
208 pmu->global_status_mask = pmu->global_ctrl_mask;
211 pmu->counter_bitmask[KVM_PMC_GP] = ((u64)1 << 48) - 1;
212 pmu->reserved_bits = 0xfffffff000280000ull;
213 pmu->raw_event_mask = AMD64_RAW_EVENT_MASK;
215 pmu->counter_bitmask[KVM_PMC_FIXED] = 0;
216 pmu->nr_arch_fixed_counters = 0;
217 bitmap_set(pmu->all_valid_pmc_idx, 0, pmu->nr_arch_gp_counters);
222 struct kvm_pmu *pmu = vcpu_to_pmu(vcpu);
229 pmu->gp_counters[i].type = KVM_PMC_GP;
230 pmu->gp_counters[i].vcpu = vcpu;
231 pmu->gp_counters[i].idx = i;
232 pmu->gp_counters[i].current_config = 0;