Re: [PATCH v5 1/7] kvm: x86/pmu: Correct the mask used in a pmu event filter lookup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> And the total patch is:
>
> ---
>  arch/x86/kvm/pmu.c           | 2 +-
>  arch/x86/kvm/pmu.h           | 2 ++
>  arch/x86/kvm/svm/pmu.c       | 2 ++
>  arch/x86/kvm/vmx/pmu_intel.c | 2 ++
>  4 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
> index d9b9a0f0db17..d0e2c7eda65b 100644
> --- a/arch/x86/kvm/pmu.c
> +++ b/arch/x86/kvm/pmu.c
> @@ -273,7 +273,7 @@ static bool check_pmu_event_filter(struct kvm_pmc *pmc)
>                 goto out;
>
>         if (pmc_is_gp(pmc)) {
> -               key = pmc->eventsel & AMD64_RAW_EVENT_MASK_NB;
> +               key = pmc->eventsel & kvm_pmu_ops.EVENTSEL_MASK;
>                 if (bsearch(&key, filter->events, filter->nevents,
>                             sizeof(__u64), cmp_u64))
>                         allow_event = filter->action == KVM_PMU_EVENT_ALLOW;
> diff --git a/arch/x86/kvm/pmu.h b/arch/x86/kvm/pmu.h
> index 5cc5721f260b..45a7dd24125d 100644
> --- a/arch/x86/kvm/pmu.h
> +++ b/arch/x86/kvm/pmu.h
> @@ -40,6 +40,8 @@ struct kvm_pmu_ops {
>         void (*reset)(struct kvm_vcpu *vcpu);
>         void (*deliver_pmi)(struct kvm_vcpu *vcpu);
>         void (*cleanup)(struct kvm_vcpu *vcpu);
> +
> +       const u64 EVENTSEL_MASK;

Agreed, a constant is better.  Had I realized I could do that, that
would have been my first choice.

What about calling it EVENTSEL_RAW_MASK to make it more descriptive
though?  It's a little too generic given there is EVENTSEL_UMASK and
EVENTSEL_CMASK, also there is precedent for using the term 'raw event'
for (eventsel+umask), i.e.
https://man7.org/linux/man-pages/man1/perf-record.1.html.

>  };
>
>  void kvm_pmu_ops_update(const struct kvm_pmu_ops *pmu_ops);
> diff --git a/arch/x86/kvm/svm/pmu.c b/arch/x86/kvm/svm/pmu.c
> index b68956299fa8..6ef7d1fcdbc2 100644
> --- a/arch/x86/kvm/svm/pmu.c
> +++ b/arch/x86/kvm/svm/pmu.c
> @@ -228,4 +228,6 @@ struct kvm_pmu_ops amd_pmu_ops __initdata = {
>         .refresh = amd_pmu_refresh,
>         .init = amd_pmu_init,
>         .reset = amd_pmu_reset,
> +       .EVENTSEL_MASK = AMD64_EVENTSEL_EVENT |
> +                        ARCH_PERFMON_EVENTSEL_UMASK,
>  };
> diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c
> index 25b70a85bef5..0a1c95b64ef1 100644
> --- a/arch/x86/kvm/vmx/pmu_intel.c
> +++ b/arch/x86/kvm/vmx/pmu_intel.c
> @@ -811,4 +811,6 @@ struct kvm_pmu_ops intel_pmu_ops __initdata = {
>         .reset = intel_pmu_reset,
>         .deliver_pmi = intel_pmu_deliver_pmi,
>         .cleanup = intel_pmu_cleanup,
> +       .EVENTSEL_MASK = ARCH_PERFMON_EVENTSEL_EVENT |
> +                        ARCH_PERFMON_EVENTSEL_UMASK,
>  };
>
> base-commit: e18d6152ff0f41b7f01f9817372022df04e0d354
> --
>



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux