Message ID | 20230310105346.12302-3-likexu@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86/pmu: Hide guest counter updates from the VMRUN instruction | expand |
On Fri, Mar 10, 2023, Like Xu wrote: > From: Like Xu <likexu@tencent.com> > > Add a helper to check if pmc has PEBS mode enabled so that more new > code may reuse this part and opportunistically drop a pmu reference. > > No functional change intended. > > Signed-off-by: Like Xu <likexu@tencent.com> > --- > arch/x86/kvm/pmu.c | 3 +-- > arch/x86/kvm/pmu.h | 7 +++++++ > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c > index d1c89a6625a0..01a6b7ffa9b1 100644 > --- a/arch/x86/kvm/pmu.c > +++ b/arch/x86/kvm/pmu.c > @@ -191,7 +191,6 @@ static int pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type, u64 config, > bool exclude_user, bool exclude_kernel, > bool intr) > { > - struct kvm_pmu *pmu = pmc_to_pmu(pmc); > struct perf_event *event; > struct perf_event_attr attr = { > .type = type, > @@ -203,7 +202,7 @@ static int pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type, u64 config, > .exclude_kernel = exclude_kernel, > .config = config, > }; > - bool pebs = test_bit(pmc->idx, (unsigned long *)&pmu->pebs_enable); > + bool pebs = pebs_is_enabled(pmc); > > attr.sample_period = get_sample_period(pmc, pmc->counter); > > diff --git a/arch/x86/kvm/pmu.h b/arch/x86/kvm/pmu.h > index cff0651b030b..db4262fe8814 100644 > --- a/arch/x86/kvm/pmu.h > +++ b/arch/x86/kvm/pmu.h > @@ -189,6 +189,13 @@ static inline void kvm_pmu_request_counter_reprogram(struct kvm_pmc *pmc) > kvm_make_request(KVM_REQ_PMU, pmc->vcpu); > } > > +static inline bool pebs_is_enabled(struct kvm_pmc *pmc) pebs_is_enabled() is a bit too generic, e.g. at a glance I would expect it to return true if PEBS as a whole is enabled. What about something like pmc_is_pebs() or pmc_is_pebs_enabled()?
diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index d1c89a6625a0..01a6b7ffa9b1 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -191,7 +191,6 @@ static int pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type, u64 config, bool exclude_user, bool exclude_kernel, bool intr) { - struct kvm_pmu *pmu = pmc_to_pmu(pmc); struct perf_event *event; struct perf_event_attr attr = { .type = type, @@ -203,7 +202,7 @@ static int pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type, u64 config, .exclude_kernel = exclude_kernel, .config = config, }; - bool pebs = test_bit(pmc->idx, (unsigned long *)&pmu->pebs_enable); + bool pebs = pebs_is_enabled(pmc); attr.sample_period = get_sample_period(pmc, pmc->counter); diff --git a/arch/x86/kvm/pmu.h b/arch/x86/kvm/pmu.h index cff0651b030b..db4262fe8814 100644 --- a/arch/x86/kvm/pmu.h +++ b/arch/x86/kvm/pmu.h @@ -189,6 +189,13 @@ static inline void kvm_pmu_request_counter_reprogram(struct kvm_pmc *pmc) kvm_make_request(KVM_REQ_PMU, pmc->vcpu); } +static inline bool pebs_is_enabled(struct kvm_pmc *pmc) +{ + struct kvm_pmu *pmu = pmc_to_pmu(pmc); + + return test_bit(pmc->idx, (unsigned long *)&pmu->pebs_enable); +} + void kvm_pmu_deliver_pmi(struct kvm_vcpu *vcpu); void kvm_pmu_handle_event(struct kvm_vcpu *vcpu); int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned pmc, u64 *data);