lkml.org 
[lkml]   [2009]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/9] KVM: SVM: Add tracepoint for nested #vmexit
    Date
    This patch adds a tracepoint for every #vmexit we get from a
    nested guest.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    ---
    arch/x86/kvm/svm.c | 6 ++++++
    arch/x86/kvm/trace.h | 36 ++++++++++++++++++++++++++++++++++++
    arch/x86/kvm/x86.c | 1 +
    3 files changed, 43 insertions(+), 0 deletions(-)
    diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
    index 907af3f..edf6e8b 100644
    --- a/arch/x86/kvm/svm.c
    +++ b/arch/x86/kvm/svm.c
    @@ -2366,6 +2366,12 @@ static int handle_exit(struct kvm_vcpu *vcpu)
    if (is_nested(svm)) {
    int vmexit;

    + trace_kvm_nested_vmexit(svm->vmcb->save.rip, exit_code,
    + svm->vmcb->control.exit_info_1,
    + svm->vmcb->control.exit_info_2,
    + svm->vmcb->control.exit_int_info,
    + svm->vmcb->control.exit_int_info_err);
    +
    nsvm_printk("nested handle_exit: 0x%x | 0x%lx | 0x%lx | 0x%lx\n",
    exit_code, svm->vmcb->control.exit_info_1,
    svm->vmcb->control.exit_info_2, svm->vmcb->save.rip);
    diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h
    index d63272c..a0b89c3 100644
    --- a/arch/x86/kvm/trace.h
    +++ b/arch/x86/kvm/trace.h
    @@ -382,6 +382,42 @@ TRACE_EVENT(kvm_nested_vmrun,
    __entry->npt ? "on" : "off")
    );

    +/*
    + * Tracepoint for #VMEXIT while nested
    + */
    +TRACE_EVENT(kvm_nested_vmexit,
    + TP_PROTO(__u64 rip, __u32 exit_code,
    + __u64 exit_info1, __u64 exit_info2,
    + __u32 exit_int_info, __u32 exit_int_info_err),
    + TP_ARGS(rip, exit_code, exit_info1, exit_info2,
    + exit_int_info, exit_int_info_err),
    +
    + TP_STRUCT__entry(
    + __field( __u64, rip )
    + __field( __u32, exit_code )
    + __field( __u64, exit_info1 )
    + __field( __u64, exit_info2 )
    + __field( __u32, exit_int_info )
    + __field( __u32, exit_int_info_err )
    + ),
    +
    + TP_fast_assign(
    + __entry->rip = rip;
    + __entry->exit_code = exit_code;
    + __entry->exit_info1 = exit_info1;
    + __entry->exit_info2 = exit_info2;
    + __entry->exit_int_info = exit_int_info;
    + __entry->exit_int_info_err = exit_int_info_err;
    + ),
    + TP_printk("rip=0x%016llx reason=%s ext_inf1=0x%016llx "
    + "ext_inf2=0x%016llx ext_int=0x%08x ext_int_err=0x%08x\n",
    + __entry->rip,
    + ftrace_print_symbols_seq(p, __entry->exit_code,
    + kvm_x86_ops->exit_reasons_str),
    + __entry->exit_info1, __entry->exit_info2,
    + __entry->exit_int_info, __entry->exit_int_info_err)
    +);
    +
    #endif /* _TRACE_KVM_H */

    /* This part must be outside protection */
    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index f1e44e9..00c8b60 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -4981,3 +4981,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_page_fault);
    EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_msr);
    EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_cr);
    EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_nested_vmrun);
    +EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_nested_vmexit);
    --
    1.6.4.3



    \
     
     \ /
      Last update: 2009-10-08 12:13    [from the cache]
    ©2003-2014 Jasper Spaans. hosted at Digital Ocean