[PATCH] KVM: x86/pmu: Apply event filter mechanism to emulated instructions

From: Like Xu
Date: Wed Feb 22 2023 - 03:20:31 EST


From: Like Xu <likexu@xxxxxxxxxxx>

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@xxxxxxxxxxx>
Signed-off-by: Like Xu <likexu@xxxxxxxxxxx>
---
arch/x86/kvm/pmu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

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 */

base-commit: 13738a3647368f7f600b30d241779bcd2a3ebbfd
--
2.39.2