X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=instrumentation%2Fevents%2Flttng-module%2Farch%2Fx86%2Fkvm%2Fmmutrace.h;h=bbfce67884794fc29c172a349ff03caf80dade22;hb=3579179e8028a10a3298c7b712a9fc6f8c0d721a;hp=2b71d44136b9d699e3c5a71d5d5791f627723d66;hpb=3bc29f0a41b3c803245b845db2e1909042e72e9c;p=lttng-modules.git diff --git a/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h b/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h index 2b71d441..bbfce678 100644 --- a/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h +++ b/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h @@ -3,44 +3,45 @@ #include "../../../../../../probes/lttng-tracepoint-event.h" #include +#include #undef TRACE_SYSTEM #define TRACE_SYSTEM kvmmmu +#undef KVM_MMU_PAGE_FIELDS +#undef KVM_MMU_PAGE_ASSIGN + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + #define KVM_MMU_PAGE_FIELDS \ + __field(unsigned long, mmu_valid_gen) \ __field(__u64, gfn) \ __field(__u32, role) \ __field(__u32, root_count) \ __field(bool, unsync) #define KVM_MMU_PAGE_ASSIGN(sp) \ + tp_assign(mmu_valid_gen, sp->mmu_valid_gen) \ tp_assign(gfn, sp->gfn) \ tp_assign(role, sp->role.word) \ tp_assign(root_count, sp->root_count) \ tp_assign(unsync, sp->unsync) -#define KVM_MMU_PAGE_PRINTK() ({ \ - const char *ret = p->buffer + p->len; \ - static const char *access_str[] = { \ - "---", "--x", "w--", "w-x", "-u-", "-ux", "wu-", "wux" \ - }; \ - union kvm_mmu_page_role role; \ - \ - role.word = __entry->role; \ - \ - trace_seq_printf(p, "sp gfn %llx %u%s q%u%s %s%s" \ - " %snxe root %u %s%c", \ - __entry->gfn, role.level, \ - role.cr4_pae ? " pae" : "", \ - role.quadrant, \ - role.direct ? " direct" : "", \ - access_str[role.access], \ - role.invalid ? " invalid" : "", \ - role.nxe ? "" : "!", \ - __entry->root_count, \ - __entry->unsync ? "unsync" : "sync", 0); \ - ret; \ - }) +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + +#define KVM_MMU_PAGE_FIELDS \ + __field(__u64, gfn) \ + __field(__u32, role) \ + __field(__u32, root_count) \ + __field(bool, unsync) + +#define KVM_MMU_PAGE_ASSIGN(sp) \ + tp_assign(gfn, sp->gfn) \ + tp_assign(role, sp->role.word) \ + tp_assign(root_count, sp->root_count) \ + tp_assign(unsync, sp->unsync) + +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ #define kvm_mmu_trace_pferr_flags \ { PFERR_PRESENT_MASK, "P" }, \ @@ -157,8 +158,7 @@ LTTNG_TRACEPOINT_EVENT( tp_assign(created, created) ), - TP_printk("%s %s", KVM_MMU_PAGE_PRINTK(), - __entry->created ? "new" : "existing") + TP_printk() ) LTTNG_TRACEPOINT_EVENT_CLASS(kvm_mmu_page_class, @@ -174,7 +174,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(kvm_mmu_page_class, KVM_MMU_PAGE_ASSIGN(sp) ), - TP_printk("%s", KVM_MMU_PAGE_PRINTK()) + TP_printk() ) LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_page_class, kvm_mmu_sync_page, @@ -195,6 +195,33 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_page_class, kvm_mmu_prepare_zap_page, TP_ARGS(sp) ) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) + +LTTNG_TRACEPOINT_EVENT( + mark_mmio_spte, + TP_PROTO(u64 *sptep, gfn_t gfn, unsigned access, unsigned int gen), + TP_ARGS(sptep, gfn, access, gen), + + TP_STRUCT__entry( + __field(void *, sptep) + __field(gfn_t, gfn) + __field(unsigned, access) + __field(unsigned int, gen) + ), + + TP_fast_assign( + tp_assign(sptep, sptep) + tp_assign(gfn, gfn) + tp_assign(access, access) + tp_assign(gen, gen) + ), + + TP_printk("sptep:%p gfn %llx access %x", __entry->sptep, __entry->gfn, + __entry->access) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + LTTNG_TRACEPOINT_EVENT( mark_mmio_spte, TP_PROTO(u64 *sptep, gfn_t gfn, unsigned access), @@ -216,6 +243,8 @@ LTTNG_TRACEPOINT_EVENT( __entry->access) ) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ + LTTNG_TRACEPOINT_EVENT( handle_mmio_page_fault, TP_PROTO(u64 addr, gfn_t gfn, unsigned access),