instrumentation: update x86 kvm instrumentation for kernel >= 5.7.0
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 13 Apr 2020 15:44:23 +0000 (11:44 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 8 May 2020 17:45:15 +0000 (13:45 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
instrumentation/events/lttng-module/arch/x86/kvm/trace.h
probes/Kbuild
probes/lttng-probe-kvm-x86.c

index 57ac7f488f472083e6f6e7c5aca729c0c600a7fc..4416ae029db23c0c06de3a4ee94400aeb4ff30f3 100644 (file)
@@ -124,8 +124,13 @@ LTTNG_TRACEPOINT_EVENT_CODE_MAP(kvm_exit, kvm_x86_exit,
        ),
 
        TP_code_pre(
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0))
+               kvm_x86_ops.get_exit_info(vcpu, &tp_locvar->info1,
+                               &tp_locvar->info2);
+#else
                kvm_x86_ops->get_exit_info(vcpu, &tp_locvar->info1,
                                &tp_locvar->info2);
+#endif
        ),
 
        TP_FIELDS(
@@ -430,13 +435,15 @@ LTTNG_TRACEPOINT_EVENT_MAP(kvm_emulate_insn, kvm_x86_emulate_insn,
                ctf_integer(__u8, len, vcpu->arch.emulate_ctxt.decode.eip
                                - vcpu->arch.emulate_ctxt.decode.fetch.start)
                ctf_array(__u8, insn, vcpu->arch.emulate_ctxt.decode.fetch.data, 15)
+               ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode))
 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0))
                ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt.fetch.start)
                ctf_integer(__u32, csbase, kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS))
                ctf_integer(__u8, len, vcpu->arch.emulate_ctxt._eip
                                - vcpu->arch.emulate_ctxt.fetch.start)
                ctf_array(__u8, insn, vcpu->arch.emulate_ctxt.fetch.data, 15)
-#else
+               ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode))
+#elif (LINUX_VERSION_CODE < KERNEL_VERSION(5,7,0))
                ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt._eip -
                                (vcpu->arch.emulate_ctxt.fetch.ptr -
                                        vcpu->arch.emulate_ctxt.fetch.data))
@@ -444,8 +451,17 @@ LTTNG_TRACEPOINT_EVENT_MAP(kvm_emulate_insn, kvm_x86_emulate_insn,
                ctf_integer(__u8, len, vcpu->arch.emulate_ctxt.fetch.ptr -
                                vcpu->arch.emulate_ctxt.fetch.data)
                ctf_array(__u8, insn, vcpu->arch.emulate_ctxt.fetch.data, 15)
-#endif
                ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode))
+#else
+               ctf_integer(__u64, rip, vcpu->arch.emulate_ctxt->_eip -
+                               (vcpu->arch.emulate_ctxt->fetch.ptr -
+                                       vcpu->arch.emulate_ctxt->fetch.data))
+               ctf_integer(__u32, csbase, kvm_x86_ops.get_segment_base(vcpu, VCPU_SREG_CS))
+               ctf_integer(__u8, len, vcpu->arch.emulate_ctxt->fetch.ptr -
+                               vcpu->arch.emulate_ctxt->fetch.data)
+               ctf_array(__u8, insn, vcpu->arch.emulate_ctxt->fetch.data, 15)
+               ctf_integer(__u8, flags, kei_decode_mode(vcpu->arch.emulate_ctxt->mode))
+#endif
                ctf_integer(__u8, failed, failed)
        )
 )
index ceef89959040ced7a5d0282e08cfb3d001b81402..3ae2d39e1162bb8e8bbcab9a49921497f52545d9 100644 (file)
@@ -30,25 +30,37 @@ ifneq ($(CONFIG_KVM),)
   obj-$(CONFIG_LTTNG) += lttng-probe-kvm.o
   ifneq ($(CONFIG_X86),)
     kvm_dep_lapic = $(srctree)/arch/x86/kvm/lapic.h
-    ifneq ($(wildcard $(kvm_dep_lapic)),)
-      kvm_dep = $(srctree)/virt/kvm/iodev.h $(srctree)/include/kvm/iodev.h
-      ifneq ($(wildcard $(kvm_dep)),)
-        CFLAGS_lttng-probe-kvm-x86.o += -I$(srctree)/virt/kvm
-        CFLAGS_lttng-probe-kvm-x86-mmu.o += -I$(srctree)/virt/kvm
-        obj-$(CONFIG_LTTNG) +=  $(shell \
-          if [ $(VERSION) -ge 3 \
-            -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 38 \) ] ; then \
-            echo "lttng-probe-kvm-x86.o" ; fi;)
-        obj-$(CONFIG_LTTNG) +=  $(shell \
-          if [ $(VERSION) -ge 3 \
-            -o \( $(VERSION) -eq 2 -a $(PATCHLEVEL) -eq 6 -a $(SUBLEVEL) -ge 38 \) ] ; then \
-            echo "lttng-probe-kvm-x86-mmu.o" ; fi;)
-      else
-        $(warning File $(kvm_dep) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.)
-      endif # $(wildcard $(kvm_dep))
-    else
+    kvm_dep_lapic_check = $(wildcard $(kvm_dep_lapic))
+    ifneq ($(kvm_dep_lapic_check),)
+      # search for iodev.h in any of its known locations
+      kvm_dep_iodev = $(srctree)/virt/kvm/iodev.h $(srctree)/include/kvm/iodev.h
+      kvm_dep_iodev_check = $(wildcard $(kvm_dep_iodev))
+      ifneq ($(kvm_dep_iodev_check),)
+        kvm_dep_emulate = $(srctree)/arch/x86/kvm/kvm_emulate.h
+        kvm_dep_emulate_wildcard = $(wildcard $(kvm_dep_emulate))
+        kvm_dep_emulate_check = $(shell \
+        if [ \( $(VERSION) -ge 6 \
+           -o \( $(VERSION) -eq 5 -a $(PATCHLEVEL) -eq 7 \) \) -a \
+           -z "$(kvm_dep_emulate_wildcard)" ] ; then \
+          echo "warn" ; \
+        else \
+          echo "ok" ; \
+        fi ;)
+        ifeq ($(kvm_dep_emulate_check),ok)
+          CFLAGS_lttng-probe-kvm-x86.o += -I$(srctree)/virt/kvm \
+                     -I$(srctree)/arch/x86/kvm
+          CFLAGS_lttng-probe-kvm-x86-mmu.o += -I$(srctree)/virt/kvm
+          obj-$(CONFIG_LTTNG) += lttng-probe-kvm-x86.o
+          obj-$(CONFIG_LTTNG) += lttng-probe-kvm-x86-mmu.o
+        else # ($(kvm_dep_emulate_check),ok)
+          $(warning File $(kvm_dep_emulate) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.)
+        endif # ($(kvm_dep_emulate_check),ok)
+      else # $(kvm_dep_iodev_check)
+        $(warning File $(kvm_dep_iodev) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.)
+      endif # $(kvm_dep_iodev_check)
+    else # $(kvm_dep_lapic_check)
       $(warning File $(kvm_dep_lapic) not found. Probe "kvm" x86-specific is disabled. Use full kernel source tree to enable it.)
-    endif # $(wildcard $(kvm_dep_lapic))
+    endif # $(kvm_dep_lapic_check)
   endif # CONFIG_X86
 endif # CONFIG_KVM
 
index f081cdd5e4fe31afa0c1c9212f44cf61885df9f7..6dfaa31e08ec7329a412bc4282749aca0f87f767 100644 (file)
 #include <lttng-tracer.h>
 #include <lttng-kernel-version.h>
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,7,0))
+#include <kvm_emulate.h>
+#endif
+
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0))
 #include <kvm/iodev.h>
 #else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) */
This page took 0.02862 seconds and 4 git commands to generate.