^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * This file is subject to the terms and conditions of the GNU General Public
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * License. See the file "COPYING" in the main directory of this archive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Authors: Sanjay Lal <sanjayl@kymasys.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define _TRACE_KVM_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/tracepoint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #undef TRACE_SYSTEM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define TRACE_SYSTEM kvm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define TRACE_INCLUDE_PATH .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define TRACE_INCLUDE_FILE trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * arch/mips/kvm/mips.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) extern bool kvm_trace_guest_mode_change;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) int kvm_guest_mode_change_trace_reg(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) void kvm_guest_mode_change_trace_unreg(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * Tracepoints for VM enters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) DECLARE_EVENT_CLASS(kvm_transition,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) TP_PROTO(struct kvm_vcpu *vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) TP_ARGS(vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) __field(unsigned long, pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __entry->pc = vcpu->arch.pc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) TP_printk("PC: 0x%08lx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __entry->pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) DEFINE_EVENT(kvm_transition, kvm_enter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) TP_PROTO(struct kvm_vcpu *vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) TP_ARGS(vcpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) DEFINE_EVENT(kvm_transition, kvm_reenter,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) TP_PROTO(struct kvm_vcpu *vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) TP_ARGS(vcpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) DEFINE_EVENT(kvm_transition, kvm_out,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) TP_PROTO(struct kvm_vcpu *vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) TP_ARGS(vcpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) /* The first 32 exit reasons correspond to Cause.ExcCode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define KVM_TRACE_EXIT_INT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define KVM_TRACE_EXIT_TLBMOD 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define KVM_TRACE_EXIT_TLBMISS_LD 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define KVM_TRACE_EXIT_TLBMISS_ST 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define KVM_TRACE_EXIT_ADDRERR_LD 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define KVM_TRACE_EXIT_ADDRERR_ST 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define KVM_TRACE_EXIT_SYSCALL 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define KVM_TRACE_EXIT_BREAK_INST 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define KVM_TRACE_EXIT_RESVD_INST 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define KVM_TRACE_EXIT_COP_UNUSABLE 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define KVM_TRACE_EXIT_TRAP_INST 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define KVM_TRACE_EXIT_MSA_FPE 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define KVM_TRACE_EXIT_FPE 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define KVM_TRACE_EXIT_MSA_DISABLED 21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define KVM_TRACE_EXIT_GUEST_EXIT 27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) /* Further exit reasons */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define KVM_TRACE_EXIT_WAIT 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define KVM_TRACE_EXIT_CACHE 33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define KVM_TRACE_EXIT_SIGNAL 34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* 32 exit reasons correspond to GuestCtl0.GExcCode (VZ) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define KVM_TRACE_EXIT_GEXCCODE_BASE 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define KVM_TRACE_EXIT_GPSI 64 /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define KVM_TRACE_EXIT_GSFC 65 /* 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define KVM_TRACE_EXIT_HC 66 /* 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define KVM_TRACE_EXIT_GRR 67 /* 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define KVM_TRACE_EXIT_GVA 72 /* 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define KVM_TRACE_EXIT_GHFC 73 /* 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define KVM_TRACE_EXIT_GPA 74 /* 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) /* Tracepoints for VM exits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define kvm_trace_symbol_exit_types \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) { KVM_TRACE_EXIT_INT, "Interrupt" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) { KVM_TRACE_EXIT_TLBMOD, "TLB Mod" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) { KVM_TRACE_EXIT_TLBMISS_LD, "TLB Miss (LD)" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) { KVM_TRACE_EXIT_TLBMISS_ST, "TLB Miss (ST)" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) { KVM_TRACE_EXIT_ADDRERR_LD, "Address Error (LD)" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) { KVM_TRACE_EXIT_ADDRERR_ST, "Address Err (ST)" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) { KVM_TRACE_EXIT_SYSCALL, "System Call" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) { KVM_TRACE_EXIT_BREAK_INST, "Break Inst" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) { KVM_TRACE_EXIT_RESVD_INST, "Reserved Inst" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) { KVM_TRACE_EXIT_COP_UNUSABLE, "COP0/1 Unusable" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) { KVM_TRACE_EXIT_TRAP_INST, "Trap Inst" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) { KVM_TRACE_EXIT_MSA_FPE, "MSA FPE" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) { KVM_TRACE_EXIT_FPE, "FPE" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) { KVM_TRACE_EXIT_MSA_DISABLED, "MSA Disabled" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) { KVM_TRACE_EXIT_GUEST_EXIT, "Guest Exit" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) { KVM_TRACE_EXIT_WAIT, "WAIT" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) { KVM_TRACE_EXIT_CACHE, "CACHE" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) { KVM_TRACE_EXIT_SIGNAL, "Signal" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) { KVM_TRACE_EXIT_GPSI, "GPSI" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) { KVM_TRACE_EXIT_GSFC, "GSFC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) { KVM_TRACE_EXIT_HC, "HC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) { KVM_TRACE_EXIT_GRR, "GRR" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) { KVM_TRACE_EXIT_GVA, "GVA" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) { KVM_TRACE_EXIT_GHFC, "GHFC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) { KVM_TRACE_EXIT_GPA, "GPA" }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) TRACE_EVENT(kvm_exit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) TP_ARGS(vcpu, reason),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __field(unsigned long, pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __field(unsigned int, reason)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) __entry->pc = vcpu->arch.pc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) __entry->reason = reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) TP_printk("[%s]PC: 0x%08lx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __print_symbolic(__entry->reason,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) kvm_trace_symbol_exit_types),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __entry->pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define KVM_TRACE_MFC0 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define KVM_TRACE_MTC0 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define KVM_TRACE_DMFC0 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define KVM_TRACE_DMTC0 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define KVM_TRACE_RDHWR 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define KVM_TRACE_HWR_COP0 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define KVM_TRACE_HWR_HWR 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define KVM_TRACE_COP0(REG, SEL) ((KVM_TRACE_HWR_COP0 << 8) | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) ((REG) << 3) | (SEL))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define KVM_TRACE_HWR(REG, SEL) ((KVM_TRACE_HWR_HWR << 8) | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) ((REG) << 3) | (SEL))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define kvm_trace_symbol_hwr_ops \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) { KVM_TRACE_MFC0, "MFC0" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) { KVM_TRACE_MTC0, "MTC0" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) { KVM_TRACE_DMFC0, "DMFC0" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) { KVM_TRACE_DMTC0, "DMTC0" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) { KVM_TRACE_RDHWR, "RDHWR" }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define kvm_trace_symbol_hwr_cop \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) { KVM_TRACE_HWR_COP0, "COP0" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) { KVM_TRACE_HWR_HWR, "HWR" }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define kvm_trace_symbol_hwr_regs \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) { KVM_TRACE_COP0( 0, 0), "Index" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) { KVM_TRACE_COP0( 2, 0), "EntryLo0" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) { KVM_TRACE_COP0( 3, 0), "EntryLo1" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) { KVM_TRACE_COP0( 4, 0), "Context" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) { KVM_TRACE_COP0( 4, 2), "UserLocal" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) { KVM_TRACE_COP0( 5, 0), "PageMask" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) { KVM_TRACE_COP0( 6, 0), "Wired" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) { KVM_TRACE_COP0( 7, 0), "HWREna" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) { KVM_TRACE_COP0( 8, 0), "BadVAddr" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) { KVM_TRACE_COP0( 9, 0), "Count" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) { KVM_TRACE_COP0(10, 0), "EntryHi" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) { KVM_TRACE_COP0(11, 0), "Compare" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) { KVM_TRACE_COP0(12, 0), "Status" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) { KVM_TRACE_COP0(12, 1), "IntCtl" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) { KVM_TRACE_COP0(12, 2), "SRSCtl" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) { KVM_TRACE_COP0(13, 0), "Cause" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) { KVM_TRACE_COP0(14, 0), "EPC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) { KVM_TRACE_COP0(15, 0), "PRId" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) { KVM_TRACE_COP0(15, 1), "EBase" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) { KVM_TRACE_COP0(16, 0), "Config" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) { KVM_TRACE_COP0(16, 1), "Config1" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) { KVM_TRACE_COP0(16, 2), "Config2" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) { KVM_TRACE_COP0(16, 3), "Config3" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) { KVM_TRACE_COP0(16, 4), "Config4" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) { KVM_TRACE_COP0(16, 5), "Config5" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) { KVM_TRACE_COP0(16, 7), "Config7" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) { KVM_TRACE_COP0(17, 1), "MAAR" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) { KVM_TRACE_COP0(17, 2), "MAARI" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) { KVM_TRACE_COP0(26, 0), "ECC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) { KVM_TRACE_COP0(30, 0), "ErrorEPC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) { KVM_TRACE_COP0(31, 2), "KScratch1" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) { KVM_TRACE_COP0(31, 3), "KScratch2" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) { KVM_TRACE_COP0(31, 4), "KScratch3" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) { KVM_TRACE_COP0(31, 5), "KScratch4" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) { KVM_TRACE_COP0(31, 6), "KScratch5" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) { KVM_TRACE_COP0(31, 7), "KScratch6" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) { KVM_TRACE_HWR( 0, 0), "CPUNum" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) { KVM_TRACE_HWR( 1, 0), "SYNCI_Step" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) { KVM_TRACE_HWR( 2, 0), "CC" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) { KVM_TRACE_HWR( 3, 0), "CCRes" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) { KVM_TRACE_HWR(29, 0), "ULR" }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) TRACE_EVENT(kvm_hwr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op, unsigned int reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) unsigned long val),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) TP_ARGS(vcpu, op, reg, val),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) __field(unsigned long, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) __field(u16, reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) __field(u8, op)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) __entry->val = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) __entry->reg = reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) __entry->op = op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) TP_printk("%s %s (%s:%u:%u) 0x%08lx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) __print_symbolic(__entry->op,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) kvm_trace_symbol_hwr_ops),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) __print_symbolic(__entry->reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) kvm_trace_symbol_hwr_regs),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) __print_symbolic(__entry->reg >> 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) kvm_trace_symbol_hwr_cop),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) (__entry->reg >> 3) & 0x1f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) __entry->reg & 0x7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) __entry->val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define KVM_TRACE_AUX_RESTORE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define KVM_TRACE_AUX_SAVE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define KVM_TRACE_AUX_ENABLE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define KVM_TRACE_AUX_DISABLE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define KVM_TRACE_AUX_DISCARD 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define KVM_TRACE_AUX_FPU 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define KVM_TRACE_AUX_MSA 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define KVM_TRACE_AUX_FPU_MSA 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define kvm_trace_symbol_aux_op \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) { KVM_TRACE_AUX_RESTORE, "restore" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) { KVM_TRACE_AUX_SAVE, "save" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) { KVM_TRACE_AUX_ENABLE, "enable" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) { KVM_TRACE_AUX_DISABLE, "disable" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) { KVM_TRACE_AUX_DISCARD, "discard" }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define kvm_trace_symbol_aux_state \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) { KVM_TRACE_AUX_FPU, "FPU" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) { KVM_TRACE_AUX_MSA, "MSA" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) { KVM_TRACE_AUX_FPU_MSA, "FPU & MSA" }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) TRACE_EVENT(kvm_aux,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) unsigned int state),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) TP_ARGS(vcpu, op, state),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) __field(unsigned long, pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) __field(u8, op)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) __field(u8, state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) __entry->pc = vcpu->arch.pc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) __entry->op = op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) __entry->state = state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) TP_printk("%s %s PC: 0x%08lx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) __print_symbolic(__entry->op,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) kvm_trace_symbol_aux_op),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) __print_symbolic(__entry->state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) kvm_trace_symbol_aux_state),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) __entry->pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) TRACE_EVENT(kvm_asid_change,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) TP_PROTO(struct kvm_vcpu *vcpu, unsigned int old_asid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) unsigned int new_asid),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) TP_ARGS(vcpu, old_asid, new_asid),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) __field(unsigned long, pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __field(u8, old_asid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) __field(u8, new_asid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) __entry->pc = vcpu->arch.pc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) __entry->old_asid = old_asid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) __entry->new_asid = new_asid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) TP_printk("PC: 0x%08lx old: 0x%02x new: 0x%02x",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) __entry->pc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) __entry->old_asid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) __entry->new_asid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) TRACE_EVENT(kvm_guestid_change,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) TP_PROTO(struct kvm_vcpu *vcpu, unsigned int guestid),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) TP_ARGS(vcpu, guestid),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) __field(unsigned int, guestid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) __entry->guestid = guestid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) TP_printk("GuestID: 0x%02x",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) __entry->guestid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) TRACE_EVENT_FN(kvm_guest_mode_change,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) TP_PROTO(struct kvm_vcpu *vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) TP_ARGS(vcpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) __field(unsigned long, epc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) __field(unsigned long, pc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) __field(unsigned long, badvaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) __field(unsigned int, status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) __field(unsigned int, cause)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) __entry->epc = kvm_read_c0_guest_epc(vcpu->arch.cop0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) __entry->pc = vcpu->arch.pc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) __entry->badvaddr = kvm_read_c0_guest_badvaddr(vcpu->arch.cop0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) __entry->status = kvm_read_c0_guest_status(vcpu->arch.cop0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) __entry->cause = kvm_read_c0_guest_cause(vcpu->arch.cop0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) TP_printk("EPC: 0x%08lx PC: 0x%08lx Status: 0x%08x Cause: 0x%08x BadVAddr: 0x%08lx",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) __entry->epc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) __entry->pc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) __entry->status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) __entry->cause,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) __entry->badvaddr),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) kvm_guest_mode_change_trace_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) kvm_guest_mode_change_trace_unreg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #endif /* _TRACE_KVM_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) /* This part must be outside protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) #include <trace/define_trace.h>