X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=instrumentation%2Fevents%2Flttng-module%2Fkvm.h;h=76eaa69a6c339dde80f30e601f0ab9fb820c1822;hb=7c2c780508917bfd9f0e343d33f02d0f78f62a76;hp=ffdc2a62b3b0ca644452d03ff7f5af23e5e827b0;hpb=d53870e8f03ca49b7259c1b4c6100979728ffce3;p=lttng-modules.git diff --git a/instrumentation/events/lttng-module/kvm.h b/instrumentation/events/lttng-module/kvm.h index ffdc2a62..76eaa69a 100644 --- a/instrumentation/events/lttng-module/kvm.h +++ b/instrumentation/events/lttng-module/kvm.h @@ -1,160 +1,78 @@ -#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 #include #undef TRACE_SYSTEM #define TRACE_SYSTEM kvm -#define ERSN(x) { KVM_EXIT_##x, "KVM_EXIT_" #x } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) -#if (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), \ - 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) - -#endif - -TRACE_EVENT(kvm_userspace_exit, +LTTNG_TRACEPOINT_EVENT(kvm_userspace_exit, TP_PROTO(__u32 reason, int errno), TP_ARGS(reason, errno), - TP_STRUCT__entry( - __field( __u32, reason ) - __field( int, errno ) - ), - - TP_fast_assign( - tp_assign(reason, reason) - tp_assign(errno, errno) - ), - - TP_printk("reason %s (%d)", - __entry->errno < 0 ? - (__entry->errno == -EINTR ? "restart" : "error") : - __print_symbolic(__entry->reason, kvm_trace_exit_reason), - __entry->errno < 0 ? -__entry->errno : __entry->reason) + TP_FIELDS( + ctf_integer(__u32, reason, reason) + ctf_integer(int, errno, errno) + ) ) +#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), - TP_STRUCT__entry( - __field( unsigned int, gsi ) - __field( int, level ) - __field( int, irq_source_id ) - ), - - TP_fast_assign( - tp_assign(gsi, gsi) - tp_assign(level, level) - tp_assign(irq_source_id, irq_source_id) - ), - - TP_printk("gsi %u level %d source %d", - __entry->gsi, __entry->level, __entry->irq_source_id) + TP_FIELDS( + ctf_integer(unsigned int, gsi, gsi) + ctf_integer(int, level, level) + ctf_integer(int, irq_source_id, irq_source_id) + ) ) +#endif + +#if defined(__KVM_HAVE_IOAPIC) -#define kvm_deliver_mode \ - {0x0, "Fixed"}, \ - {0x1, "LowPrio"}, \ - {0x2, "SMI"}, \ - {0x3, "Res3"}, \ - {0x4, "NMI"}, \ - {0x5, "INIT"}, \ - {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), - TP_STRUCT__entry( - __field( __u64, e ) - __field( int, pin ) - __field( bool, coalesced ) - ), - - TP_fast_assign( - tp_assign(e, e) - tp_assign(pin, pin) - tp_assign(coalesced, coalesced) - ), - - TP_printk("pin %u dst %x vec=%u (%s|%s|%s%s)%s", - __entry->pin, (u8)(__entry->e >> 56), (u8)__entry->e, - __print_symbolic((__entry->e >> 8 & 0x7), kvm_deliver_mode), - (__entry->e & (1<<11)) ? "logical" : "physical", - (__entry->e & (1<<15)) ? "level" : "edge", - (__entry->e & (1<<16)) ? "|masked" : "", - __entry->coalesced ? " (coalesced)" : "") + TP_FIELDS( + ctf_integer(__u64, e, e) + ctf_integer(int, pin, pin) + ctf_integer(bool, 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), - TP_STRUCT__entry( - __field( __u64, address ) - __field( __u64, data ) - ), - - TP_fast_assign( - tp_assign(address, address) - tp_assign(data, data) - ), - - TP_printk("dst %u vec %x (%s|%s|%s%s)", - (u8)(__entry->address >> 12), (u8)__entry->data, - __print_symbolic((__entry->data >> 8 & 0x7), kvm_deliver_mode), - (__entry->address & (1<<2)) ? "logical" : "physical", - (__entry->data & (1<<15)) ? "level" : "edge", - (__entry->address & (1<<3)) ? "|rh" : "") + TP_FIELDS( + ctf_integer(__u64, address, address) + ctf_integer(__u64, data, data) + ) ) -#define kvm_irqchips \ - {KVM_IRQCHIP_PIC_MASTER, "PIC master"}, \ - {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), - TP_STRUCT__entry( - __field( unsigned int, irqchip ) - __field( unsigned int, pin ) - ), - - TP_fast_assign( - tp_assign(irqchip, irqchip) - tp_assign(pin, pin) - ), - - TP_printk("irqchip %s pin %u", - __print_symbolic(__entry->irqchip, kvm_irqchips), - __entry->pin) + TP_FIELDS( + ctf_integer(unsigned int, irqchip, irqchip) + ctf_integer(unsigned int, pin, pin) + ) ) - - #endif /* defined(__KVM_HAVE_IOAPIC) */ #define KVM_TRACE_MMIO_READ_UNSATISFIED 0 @@ -166,162 +84,181 @@ TRACE_EVENT(kvm_ack_irq, { KVM_TRACE_MMIO_READ, "read" }, \ { KVM_TRACE_MMIO_WRITE, "write" } -TRACE_EVENT(kvm_mmio, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0) \ + || LTTNG_KERNEL_RANGE(4,14,14, 4,15,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(4,14,13,0,1,0, 4,15,0,0,0,0) \ + || LTTNG_KERNEL_RANGE(4,9,77, 4,10,0) \ + || LTTNG_KERNEL_RANGE(4,4,112, 4,5,0) \ + || LTTNG_KERNEL_RANGE(3,16,52, 3,17,0) \ + || LTTNG_KERNEL_RANGE(3,2,97, 3,3,0) \ + || LTTNG_DEBIAN_KERNEL_RANGE(4,9,65,0,3,0, 4,10,0,0,0,0) \ + || LTTNG_FEDORA_KERNEL_RANGE(4,14,13,300, 4,15,0,0)) + +LTTNG_TRACEPOINT_EVENT(kvm_mmio, + TP_PROTO(int type, int len, u64 gpa, void *val), + TP_ARGS(type, len, gpa, val), + + TP_FIELDS( + ctf_integer(u32, type, type) + ctf_integer(u32, len, len) + ctf_integer(u64, gpa, gpa) + ctf_sequence_hex(unsigned char, val, val, u32, len) + ) +) + +#else + +LTTNG_TRACEPOINT_EVENT(kvm_mmio, TP_PROTO(int type, int len, u64 gpa, u64 val), TP_ARGS(type, len, gpa, val), - TP_STRUCT__entry( - __field( u32, type ) - __field( u32, len ) - __field( u64, gpa ) - __field( u64, val ) - ), - - TP_fast_assign( - tp_assign(type, type) - tp_assign(len, len) - tp_assign(gpa, gpa) - tp_assign(val, val) - ), - - TP_printk("mmio %s len %u gpa 0x%llx val 0x%llx", - __print_symbolic(__entry->type, kvm_trace_symbol_mmio), - __entry->len, __entry->gpa, __entry->val) + TP_FIELDS( + ctf_integer(u32, type, type) + ctf_integer(u32, len, len) + ctf_integer(u64, gpa, gpa) + ctf_integer(u64, val, val) + ) ) +#endif + +#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), - TP_STRUCT__entry( - __field( u32, load ) - ), + TP_FIELDS( + ctf_integer(u32, load, load) + ) +) + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,18,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,327,0,0, 3,11,0,0,0,0)) - TP_fast_assign( - tp_assign(load, load) - ), +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_printk("%s", __print_symbolic(__entry->load, kvm_fpu_load_symbol)) + TP_FIELDS( + ctf_integer(u64, hva, + ((gfn - slot->base_gfn) << PAGE_SHIFT) + slot->userspace_addr) + ctf_integer(u64, gfn, gfn) + ctf_integer(u8, level, level) + ctf_integer(u8, referenced, ref) + ) ) -TRACE_EVENT(kvm_age_page, +#else + +LTTNG_TRACEPOINT_EVENT(kvm_age_page, TP_PROTO(ulong hva, struct kvm_memory_slot *slot, int ref), TP_ARGS(hva, slot, ref), - TP_STRUCT__entry( - __field( u64, hva ) - __field( u64, gfn ) - __field( u8, referenced ) - ), - - TP_fast_assign( - tp_assign(hva, hva) - tp_assign(gfn, - slot->base_gfn + ((hva - slot->userspace_addr) >> PAGE_SHIFT)) - tp_assign(referenced, ref) - ), - - TP_printk("hva %llx gfn %llx %s", - __entry->hva, __entry->gfn, - __entry->referenced ? "YOUNG" : "OLD") + TP_FIELDS( + ctf_integer(u64, hva, hva) + ctf_integer(u64, gfn, + slot->base_gfn + ((hva - slot->userspace_addr) >> PAGE_SHIFT)) + ctf_integer(u8, referenced, ref) + ) ) +#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), TP_ARGS(gva, gfn), - TP_STRUCT__entry( - __field(__u64, gva) - __field(u64, gfn) - ), - - TP_fast_assign( - tp_assign(gva, gva) - tp_assign(gfn, gfn) - ), - - TP_printk("gva = %#llx, gfn = %#llx", __entry->gva, __entry->gfn) + TP_FIELDS( + ctf_integer(__u64, gva, gva) + ctf_integer(u64, gfn, 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), TP_ARGS(token, gva), - TP_STRUCT__entry( - __field(__u64, token) - __field(__u64, gva) - ), + TP_FIELDS( + ctf_integer(__u64, token, token) + ctf_integer(__u64, gva, gva) + ) +) - TP_fast_assign( - tp_assign(token, token) - tp_assign(gva, gva) - ), +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_pf_nopresent_ready, kvm_async_pf_not_present, - TP_printk("token %#llx gva %#llx", __entry->token, __entry->gva) + TP_PROTO(u64 token, u64 gva), + TP_ARGS(token, gva) ) -DEFINE_EVENT(kvm_async_pf_nopresent_ready, kvm_async_pf_not_present, +LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_async_pf_nopresent_ready, kvm_async_pf_ready, TP_PROTO(u64 token, u64 gva), TP_ARGS(token, gva) ) -DEFINE_EVENT(kvm_async_pf_nopresent_ready, kvm_async_pf_ready, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0) \ + || LTTNG_RHEL_KERNEL_RANGE(3,10,0,229,0,0, 3,11,0,0,0,0)) - TP_PROTO(u64 token, u64 gva), +LTTNG_TRACEPOINT_EVENT( + kvm_async_pf_completed, + TP_PROTO(unsigned long address, u64 gva), + TP_ARGS(address, gva), - TP_ARGS(token, gva) + TP_FIELDS( + ctf_integer(unsigned long, address, address) + ctf_integer(u64, gva, gva) + ) ) -TRACE_EVENT( +#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), - TP_STRUCT__entry( - __field(unsigned long, address) - __field(pfn_t, pfn) - __field(u64, gva) - ), + TP_FIELDS( + ctf_integer(unsigned long, address, address) + ctf_integer(pfn_t, pfn, page ? page_to_pfn(page) : 0) + ctf_integer(u64, gva, gva) + ) +) - TP_fast_assign( - tp_assign(address, address) - tp_assign(pfn, page ? page_to_pfn(page) : 0) - tp_assign(gva, gva) - ), +#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) */ - TP_printk("gva %#llx address %#lx pfn %#llx", __entry->gva, - __entry->address, __entry->pfn) -) +#endif #endif -#endif /* _TRACE_KVM_MAIN_H */ +#endif /* LTTNG_TRACE_KVM_MAIN_H */ /* This part must be outside protection */ -#include "../../../probes/define_trace.h" +#include