/* Disable hardware page table walking while in guest */
        htw_stop();
 
+       trace_kvm_enter(vcpu);
        r = vcpu->arch.vcpu_run(run, vcpu);
+       trace_kvm_out(vcpu);
 
        /* Re-enable HTW before enabling interrupts */
        htw_start();
        }
 
        if (ret == RESUME_GUEST) {
+               trace_kvm_reenter(vcpu);
+
                /*
                 * If FPU / MSA are enabled (i.e. the guest's FPU / MSA context
                 * is live), restore FCR31 / MSACSR.
 
 #define TRACE_INCLUDE_PATH .
 #define TRACE_INCLUDE_FILE trace
 
+/*
+ * Tracepoints for VM enters
+ */
+TRACE_EVENT(kvm_enter,
+           TP_PROTO(struct kvm_vcpu *vcpu),
+           TP_ARGS(vcpu),
+           TP_STRUCT__entry(
+                       __field(unsigned long, pc)
+           ),
+
+           TP_fast_assign(
+                       __entry->pc = vcpu->arch.pc;
+           ),
+
+           TP_printk("PC: 0x%08lx",
+                     __entry->pc)
+);
+
+TRACE_EVENT(kvm_reenter,
+           TP_PROTO(struct kvm_vcpu *vcpu),
+           TP_ARGS(vcpu),
+           TP_STRUCT__entry(
+                       __field(unsigned long, pc)
+           ),
+
+           TP_fast_assign(
+                       __entry->pc = vcpu->arch.pc;
+           ),
+
+           TP_printk("PC: 0x%08lx",
+                     __entry->pc)
+);
+
+TRACE_EVENT(kvm_out,
+           TP_PROTO(struct kvm_vcpu *vcpu),
+           TP_ARGS(vcpu),
+           TP_STRUCT__entry(
+                       __field(unsigned long, pc)
+           ),
+
+           TP_fast_assign(
+                       __entry->pc = vcpu->arch.pc;
+           ),
+
+           TP_printk("PC: 0x%08lx",
+                     __entry->pc)
+);
+
 /* The first 32 exit reasons correspond to Cause.ExcCode */
 #define KVM_TRACE_EXIT_INT              0
 #define KVM_TRACE_EXIT_TLBMOD           1