X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=instrumentation%2Fevents%2Flttng-module%2Fkvm.h;h=4f9509585ece2d2a6ff90230794adfb1962306c0;hb=5f79e67ecff15c0461df0cb3274b3b90cc39826d;hp=e10455bc8cf8cd496d7d66e931450e52ed37b586;hpb=5b88d86e2d45fed6d405fd9fb72d6c1c22d35374;p=lttng-modules.git diff --git a/instrumentation/events/lttng-module/kvm.h b/instrumentation/events/lttng-module/kvm.h old mode 100644 new mode 100755 index e10455bc..4f950958 --- a/instrumentation/events/lttng-module/kvm.h +++ b/instrumentation/events/lttng-module/kvm.h @@ -1,13 +1,38 @@ -#if !defined(_TRACE_KVM_MAIN_H) || defined(TRACE_HEADER_MULTI_READ) -#define _TRACE_KVM_MAIN_H +#if !defined(LTTNG_TRACE_KVM_MAIN_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_KVM_MAIN_H -#include +#include "../../../probes/lttng-tracepoint-event.h" +#include #undef TRACE_SYSTEM #define TRACE_SYSTEM kvm +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) + #define ERSN(x) { KVM_EXIT_##x, "KVM_EXIT_" #x } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + +#define kvm_trace_exit_reason \ + ERSN(UNKNOWN), ERSN(EXCEPTION), ERSN(IO), ERSN(HYPERCALL), \ + ERSN(DEBUG), ERSN(HLT), ERSN(MMIO), ERSN(IRQ_WINDOW_OPEN), \ + ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \ + ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ + ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \ + ERSN(S390_UCONTROL), ERSN(WATCHDOG), ERSN(S390_TSCH) + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) + +#define kvm_trace_exit_reason \ + ERSN(UNKNOWN), ERSN(EXCEPTION), ERSN(IO), ERSN(HYPERCALL), \ + ERSN(DEBUG), ERSN(HLT), ERSN(MMIO), ERSN(IRQ_WINDOW_OPEN), \ + ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \ + ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ + ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \ + ERSN(S390_UCONTROL) + +#else + #define kvm_trace_exit_reason \ ERSN(UNKNOWN), ERSN(EXCEPTION), ERSN(IO), ERSN(HYPERCALL), \ ERSN(DEBUG), ERSN(HLT), ERSN(MMIO), ERSN(IRQ_WINDOW_OPEN), \ @@ -15,7 +40,9 @@ ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI) -TRACE_EVENT(kvm_userspace_exit, +#endif + +LTTNG_TRACEPOINT_EVENT(kvm_userspace_exit, TP_PROTO(__u32 reason, int errno), TP_ARGS(reason, errno), @@ -35,9 +62,17 @@ TRACE_EVENT(kvm_userspace_exit, __print_symbolic(__entry->reason, kvm_trace_exit_reason), __entry->errno < 0 ? -__entry->errno : __entry->reason) ) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) #if defined(__KVM_HAVE_IOAPIC) -TRACE_EVENT(kvm_set_irq, +#undef __KVM_HAVE_IRQ_LINE +#define __KVM_HAVE_IRQ_LINE +#endif +#endif + +#if defined(__KVM_HAVE_IRQ_LINE) +LTTNG_TRACEPOINT_EVENT(kvm_set_irq, TP_PROTO(unsigned int gsi, int level, int irq_source_id), TP_ARGS(gsi, level, irq_source_id), @@ -56,7 +91,9 @@ TRACE_EVENT(kvm_set_irq, TP_printk("gsi %u level %d source %d", __entry->gsi, __entry->level, __entry->irq_source_id) ) +#endif +#if defined(__KVM_HAVE_IOAPIC) #define kvm_deliver_mode \ {0x0, "Fixed"}, \ {0x1, "LowPrio"}, \ @@ -67,7 +104,7 @@ TRACE_EVENT(kvm_set_irq, {0x6, "SIPI"}, \ {0x7, "ExtINT"} -TRACE_EVENT(kvm_ioapic_set_irq, +LTTNG_TRACEPOINT_EVENT(kvm_ioapic_set_irq, TP_PROTO(__u64 e, int pin, bool coalesced), TP_ARGS(e, pin, coalesced), @@ -92,7 +129,7 @@ TRACE_EVENT(kvm_ioapic_set_irq, __entry->coalesced ? " (coalesced)" : "") ) -TRACE_EVENT(kvm_msi_set_irq, +LTTNG_TRACEPOINT_EVENT(kvm_msi_set_irq, TP_PROTO(__u64 address, __u64 data), TP_ARGS(address, data), @@ -119,7 +156,7 @@ TRACE_EVENT(kvm_msi_set_irq, {KVM_IRQCHIP_PIC_SLAVE, "PIC slave"}, \ {KVM_IRQCHIP_IOAPIC, "IOAPIC"} -TRACE_EVENT(kvm_ack_irq, +LTTNG_TRACEPOINT_EVENT(kvm_ack_irq, TP_PROTO(unsigned int irqchip, unsigned int pin), TP_ARGS(irqchip, pin), @@ -151,7 +188,7 @@ TRACE_EVENT(kvm_ack_irq, { KVM_TRACE_MMIO_READ, "read" }, \ { KVM_TRACE_MMIO_WRITE, "write" } -TRACE_EVENT(kvm_mmio, +LTTNG_TRACEPOINT_EVENT(kvm_mmio, TP_PROTO(int type, int len, u64 gpa, u64 val), TP_ARGS(type, len, gpa, val), @@ -174,11 +211,13 @@ TRACE_EVENT(kvm_mmio, __entry->len, __entry->gpa, __entry->val) ) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) + #define kvm_fpu_load_symbol \ {0, "unload"}, \ {1, "load"} -TRACE_EVENT(kvm_fpu, +LTTNG_TRACEPOINT_EVENT(kvm_fpu, TP_PROTO(int load), TP_ARGS(load), @@ -193,7 +232,35 @@ TRACE_EVENT(kvm_fpu, TP_printk("%s", __print_symbolic(__entry->load, kvm_fpu_load_symbol)) ) -TRACE_EVENT(kvm_age_page, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,18,0)) + +LTTNG_TRACEPOINT_EVENT(kvm_age_page, + TP_PROTO(ulong gfn, int level, struct kvm_memory_slot *slot, int ref), + TP_ARGS(gfn, level, slot, ref), + + TP_STRUCT__entry( + __field( u64, hva ) + __field( u64, gfn ) + __field( u8, level ) + __field( u8, referenced ) + ), + + TP_fast_assign( + tp_assign(gfn, gfn) + tp_assign(level, level) + tp_assign(hva, ((gfn - slot->base_gfn) << + PAGE_SHIFT) + slot->userspace_addr) + tp_assign(referenced, ref) + ), + + TP_printk("hva %llx gfn %llx level %u %s", + __entry->hva, __entry->gfn, __entry->level, + __entry->referenced ? "YOUNG" : "OLD") +) + +#else + +LTTNG_TRACEPOINT_EVENT(kvm_age_page, TP_PROTO(ulong hva, struct kvm_memory_slot *slot, int ref), TP_ARGS(hva, slot, ref), @@ -214,9 +281,13 @@ TRACE_EVENT(kvm_age_page, __entry->hva, __entry->gfn, __entry->referenced ? "YOUNG" : "OLD") ) +#endif +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) #ifdef CONFIG_KVM_ASYNC_PF -DECLARE_EVENT_CLASS(kvm_async_get_page_class, +LTTNG_TRACEPOINT_EVENT_CLASS(kvm_async_get_page_class, TP_PROTO(u64 gva, u64 gfn), @@ -235,21 +306,21 @@ DECLARE_EVENT_CLASS(kvm_async_get_page_class, TP_printk("gva = %#llx, gfn = %#llx", __entry->gva, __entry->gfn) ) -DEFINE_EVENT(kvm_async_get_page_class, kvm_try_async_get_page, +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_get_page_class, kvm_try_async_get_page, TP_PROTO(u64 gva, u64 gfn), TP_ARGS(gva, gfn) ) -DEFINE_EVENT(kvm_async_get_page_class, kvm_async_pf_doublefault, +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_get_page_class, kvm_async_pf_doublefault, TP_PROTO(u64 gva, u64 gfn), TP_ARGS(gva, gfn) ) -DECLARE_EVENT_CLASS(kvm_async_pf_nopresent_ready, +LTTNG_TRACEPOINT_EVENT_CLASS(kvm_async_pf_nopresent_ready, TP_PROTO(u64 token, u64 gva), @@ -269,21 +340,44 @@ DECLARE_EVENT_CLASS(kvm_async_pf_nopresent_ready, ) -DEFINE_EVENT(kvm_async_pf_nopresent_ready, kvm_async_pf_not_present, +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_pf_nopresent_ready, kvm_async_pf_not_present, TP_PROTO(u64 token, u64 gva), TP_ARGS(token, gva) ) -DEFINE_EVENT(kvm_async_pf_nopresent_ready, kvm_async_pf_ready, +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_pf_nopresent_ready, kvm_async_pf_ready, TP_PROTO(u64 token, u64 gva), TP_ARGS(token, gva) ) -TRACE_EVENT( +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) + +LTTNG_TRACEPOINT_EVENT( + kvm_async_pf_completed, + TP_PROTO(unsigned long address, u64 gva), + TP_ARGS(address, gva), + + TP_STRUCT__entry( + __field(unsigned long, address) + __field(u64, gva) + ), + + TP_fast_assign( + tp_assign(address, address) + tp_assign(gva, gva) + ), + + TP_printk("gva %#llx address %#lx", __entry->gva, + __entry->address) +) + +#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) */ + +LTTNG_TRACEPOINT_EVENT( kvm_async_pf_completed, TP_PROTO(unsigned long address, struct page *page, u64 gva), TP_ARGS(address, page, gva), @@ -304,9 +398,13 @@ TRACE_EVENT( __entry->address, __entry->pfn) ) +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) */ + +#endif + #endif -#endif /* _TRACE_KVM_MAIN_H */ +#endif /* LTTNG_TRACE_KVM_MAIN_H */ /* This part must be outside protection */ #include "../../../probes/define_trace.h"