Message ID | 20230222082002.97570-1-likexu@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86/pmu: Apply event filter mechanism to emulated instructions | expand |
On Wed, Feb 22, 2023, Like Xu wrote: > From: Like Xu <likexu@tencent.com> > > The check_pmu_event_filter() prevents the perf_event from being created > and stops the associated counters from increasing, the same check should > also be applied to counter increases caused by emulated instructions. > Otherwise this filter mechanism cannot be considered to be in effect. > > Reported-by: Jinrong Liang <cloudliang@tencent.com> Already posted by Aaron[*], but I don't think there's been a follow-up. Aaron? [*] https://lore.kernel.org/all/20221209194957.2774423-2-aaronlewis@google.com
On Wed, Feb 22, 2023 at 7:28 PM Sean Christopherson <seanjc@google.com> wrote: > > On Wed, Feb 22, 2023, Like Xu wrote: > > From: Like Xu <likexu@tencent.com> > > > > The check_pmu_event_filter() prevents the perf_event from being created > > and stops the associated counters from increasing, the same check should > > also be applied to counter increases caused by emulated instructions. > > Otherwise this filter mechanism cannot be considered to be in effect. > > > > Reported-by: Jinrong Liang <cloudliang@tencent.com> > > Already posted by Aaron[*], but I don't think there's been a follow-up. Aaron? > > [*] https://lore.kernel.org/all/20221209194957.2774423-2-aaronlewis@google.com There hasn't been a follow-up yet. I'll try to get one out in the next week or so.
diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index 7b6c3ba2c8e1..1fd1c2f0d4da 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -684,7 +684,8 @@ void kvm_pmu_trigger_event(struct kvm_vcpu *vcpu, u64 perf_hw_id) for_each_set_bit(i, pmu->all_valid_pmc_idx, X86_PMC_IDX_MAX) { pmc = static_call(kvm_x86_pmu_pmc_idx_to_pmc)(pmu, i); - if (!pmc || !pmc_is_enabled(pmc) || !pmc_speculative_in_use(pmc)) + if (!pmc || !pmc_is_enabled(pmc) || !pmc_speculative_in_use(pmc) || + !check_pmu_event_filter(pmc)) continue; /* Ignore checks for edge detect, pin control, invert and CMASK bits */