On Tue, Jul 13, 2021 at 3:10 PM David Matlack <dmatlack@xxxxxxxxxx> wrote: > > Enum values have to be exported to userspace since the formatting is not > done in the kernel. Without doing this perf maps RET_PF_FIXED and > RET_PF_SPURIOUS to 0, which results in incorrect output: > > $ perf record -a -e kvmmmu:fast_page_fault --filter "ret==3" -- ./access_tracking_perf_test > $ perf script | head -1 > [...] new 610006048d25877 spurious 0 fixed 0 <------ should be 1 > > Fix this by exporting the enum values to userspace with TRACE_DEFINE_ENUM. > > Fixes: c4371c2a682e ("KVM: x86/mmu: Return unique RET_PF_* values if the fault was fixed") Reviewed-by: Ben Gardon <bgardon@xxxxxxxxxx> > Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx> > --- > arch/x86/kvm/mmu/mmu_internal.h | 3 +++ > arch/x86/kvm/mmu/mmutrace.h | 6 ++++++ > 2 files changed, 9 insertions(+) > > diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h > index 35567293c1fd..626cb848dab4 100644 > --- a/arch/x86/kvm/mmu/mmu_internal.h > +++ b/arch/x86/kvm/mmu/mmu_internal.h > @@ -140,6 +140,9 @@ void kvm_flush_remote_tlbs_with_address(struct kvm *kvm, > * RET_PF_INVALID: the spte is invalid, let the real page fault path update it. > * RET_PF_FIXED: The faulting entry has been fixed. > * RET_PF_SPURIOUS: The faulting entry was already fixed, e.g. by another vCPU. > + * > + * Any names added to this enum should be exported to userspace for use in > + * tracepoints via TRACE_DEFINE_ENUM() in mmutrace.h > */ > enum { > RET_PF_RETRY = 0, > diff --git a/arch/x86/kvm/mmu/mmutrace.h b/arch/x86/kvm/mmu/mmutrace.h > index efbad33a0645..2924a4081a19 100644 > --- a/arch/x86/kvm/mmu/mmutrace.h > +++ b/arch/x86/kvm/mmu/mmutrace.h > @@ -54,6 +54,12 @@ > { PFERR_RSVD_MASK, "RSVD" }, \ > { PFERR_FETCH_MASK, "F" } > > +TRACE_DEFINE_ENUM(RET_PF_RETRY); > +TRACE_DEFINE_ENUM(RET_PF_EMULATE); > +TRACE_DEFINE_ENUM(RET_PF_INVALID); > +TRACE_DEFINE_ENUM(RET_PF_FIXED); > +TRACE_DEFINE_ENUM(RET_PF_SPURIOUS); > + > /* > * A pagetable walk has started > */ > -- > 2.32.0.93.g670b81a890-goog >