lkml.org 
[lkml]   [2020]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] KVM: x86: Add requested index to the CPUID tracepoint
    Date
    Output the requested index when tracing CPUID emulation; it's basically
    mandatory for leafs where the index is meaningful, and is helpful for
    verifying KVM correctness even when the index isn't meaningful, e.g. the
    trace for a Linux guest's hypervisor_cpuid_base() probing appears to
    be broken (returns all zeroes) at first glance, but is correct because
    the index is non-zero, i.e. the output values correspond to a random
    index in the maximum basic leaf.

    Suggested-by: Xiaoyao Li <xiaoyao.li@intel.com>
    Cc: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    arch/x86/kvm/cpuid.c | 2 +-
    arch/x86/kvm/trace.h | 13 ++++++++-----
    2 files changed, 9 insertions(+), 6 deletions(-)

    diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
    index 08280d8a2ac9..bccaae0df668 100644
    --- a/arch/x86/kvm/cpuid.c
    +++ b/arch/x86/kvm/cpuid.c
    @@ -1026,7 +1026,7 @@ bool kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *ebx,
    }
    }
    }
    - trace_kvm_cpuid(orig_function, *eax, *ebx, *ecx, *edx, exact);
    + trace_kvm_cpuid(orig_function, index, *eax, *ebx, *ecx, *edx, exact);
    return exact;
    }
    EXPORT_SYMBOL_GPL(kvm_cpuid);
    diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h
    index 6c4d9b4caf07..27270ba0f05f 100644
    --- a/arch/x86/kvm/trace.h
    +++ b/arch/x86/kvm/trace.h
    @@ -151,12 +151,14 @@ TRACE_EVENT(kvm_fast_mmio,
    * Tracepoint for cpuid.
    */
    TRACE_EVENT(kvm_cpuid,
    - TP_PROTO(unsigned int function, unsigned long rax, unsigned long rbx,
    - unsigned long rcx, unsigned long rdx, bool found),
    - TP_ARGS(function, rax, rbx, rcx, rdx, found),
    + TP_PROTO(unsigned int function, unsigned int index, unsigned long rax,
    + unsigned long rbx, unsigned long rcx, unsigned long rdx,
    + bool found),
    + TP_ARGS(function, index, rax, rbx, rcx, rdx, found),

    TP_STRUCT__entry(
    __field( unsigned int, function )
    + __field( unsigned int, index )
    __field( unsigned long, rax )
    __field( unsigned long, rbx )
    __field( unsigned long, rcx )
    @@ -166,6 +168,7 @@ TRACE_EVENT(kvm_cpuid,

    TP_fast_assign(
    __entry->function = function;
    + __entry->index = index;
    __entry->rax = rax;
    __entry->rbx = rbx;
    __entry->rcx = rcx;
    @@ -173,8 +176,8 @@ TRACE_EVENT(kvm_cpuid,
    __entry->found = found;
    ),

    - TP_printk("func %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s",
    - __entry->function, __entry->rax,
    + TP_printk("func %x idx %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s",
    + __entry->function, __entry->index, __entry->rax,
    __entry->rbx, __entry->rcx, __entry->rdx,
    __entry->found ? "found" : "not found")
    );
    --
    2.24.1
    \
     
     \ /
      Last update: 2020-03-17 20:54    [W:2.326 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site