xref: /linux/arch/loongarch/kvm/trace.h (revision 3d0fe49454652117522f60bfbefb978ba0e5300b)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
4  */
5 
6 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
7 #define _TRACE_KVM_H
8 
9 #include <linux/tracepoint.h>
10 #include <asm/kvm_csr.h>
11 
12 #undef	TRACE_SYSTEM
13 #define TRACE_SYSTEM	kvm
14 
15 /*
16  * Tracepoints for VM enters
17  */
18 DECLARE_EVENT_CLASS(kvm_transition,
19 	TP_PROTO(struct kvm_vcpu *vcpu),
20 	TP_ARGS(vcpu),
21 	TP_STRUCT__entry(
22 		__field(unsigned long, pc)
23 	),
24 
25 	TP_fast_assign(
26 		__entry->pc = vcpu->arch.pc;
27 	),
28 
29 	TP_printk("PC: 0x%08lx", __entry->pc)
30 );
31 
32 DEFINE_EVENT(kvm_transition, kvm_enter,
33 	     TP_PROTO(struct kvm_vcpu *vcpu),
34 	     TP_ARGS(vcpu));
35 
36 DEFINE_EVENT(kvm_transition, kvm_reenter,
37 	     TP_PROTO(struct kvm_vcpu *vcpu),
38 	     TP_ARGS(vcpu));
39 
40 DEFINE_EVENT(kvm_transition, kvm_out,
41 	     TP_PROTO(struct kvm_vcpu *vcpu),
42 	     TP_ARGS(vcpu));
43 
44 /* Further exit reasons */
45 #define KVM_TRACE_EXIT_IDLE		64
46 #define KVM_TRACE_EXIT_CACHE		65
47 
48 /* Tracepoints for VM exits */
49 #define kvm_trace_symbol_exit_types			\
50 	{ KVM_TRACE_EXIT_IDLE,		"IDLE" },	\
51 	{ KVM_TRACE_EXIT_CACHE,		"CACHE" }
52 
53 DECLARE_EVENT_CLASS(kvm_exit,
54 	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
55 	    TP_ARGS(vcpu, reason),
56 	    TP_STRUCT__entry(
57 			__field(unsigned long, pc)
58 			__field(unsigned int, reason)
59 	    ),
60 
61 	    TP_fast_assign(
62 			__entry->pc = vcpu->arch.pc;
63 			__entry->reason = reason;
64 	    ),
65 
66 	    TP_printk("[%s]PC: 0x%08lx",
67 		      __print_symbolic(__entry->reason,
68 				       kvm_trace_symbol_exit_types),
69 		      __entry->pc)
70 );
71 
72 DEFINE_EVENT(kvm_exit, kvm_exit_idle,
73 	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
74 	     TP_ARGS(vcpu, reason));
75 
76 DEFINE_EVENT(kvm_exit, kvm_exit_cache,
77 	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
78 	     TP_ARGS(vcpu, reason));
79 
80 DEFINE_EVENT(kvm_exit, kvm_exit,
81 	     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
82 	     TP_ARGS(vcpu, reason));
83 
84 TRACE_EVENT(kvm_exit_gspr,
85 	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int inst_word),
86 	    TP_ARGS(vcpu, inst_word),
87 	    TP_STRUCT__entry(
88 			__field(unsigned int, inst_word)
89 	    ),
90 
91 	    TP_fast_assign(
92 			__entry->inst_word = inst_word;
93 	    ),
94 
95 	    TP_printk("Inst word: 0x%08x", __entry->inst_word)
96 );
97 
98 #define KVM_TRACE_AUX_SAVE		0
99 #define KVM_TRACE_AUX_RESTORE		1
100 #define KVM_TRACE_AUX_ENABLE		2
101 #define KVM_TRACE_AUX_DISABLE		3
102 #define KVM_TRACE_AUX_DISCARD		4
103 
104 #define KVM_TRACE_AUX_FPU		1
105 
106 #define kvm_trace_symbol_aux_op				\
107 	{ KVM_TRACE_AUX_SAVE,		"save" },	\
108 	{ KVM_TRACE_AUX_RESTORE,	"restore" },	\
109 	{ KVM_TRACE_AUX_ENABLE,		"enable" },	\
110 	{ KVM_TRACE_AUX_DISABLE,	"disable" },	\
111 	{ KVM_TRACE_AUX_DISCARD,	"discard" }
112 
113 #define kvm_trace_symbol_aux_state			\
114 	{ KVM_TRACE_AUX_FPU,     "FPU" }
115 
116 TRACE_EVENT(kvm_aux,
117 	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op,
118 		     unsigned int state),
119 	    TP_ARGS(vcpu, op, state),
120 	    TP_STRUCT__entry(
121 			__field(unsigned long, pc)
122 			__field(u8, op)
123 			__field(u8, state)
124 	    ),
125 
126 	    TP_fast_assign(
127 			__entry->pc = vcpu->arch.pc;
128 			__entry->op = op;
129 			__entry->state = state;
130 	    ),
131 
132 	    TP_printk("%s %s PC: 0x%08lx",
133 		      __print_symbolic(__entry->op,
134 				       kvm_trace_symbol_aux_op),
135 		      __print_symbolic(__entry->state,
136 				       kvm_trace_symbol_aux_state),
137 		      __entry->pc)
138 );
139 
140 TRACE_EVENT(kvm_vpid_change,
141 	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned long vpid),
142 	    TP_ARGS(vcpu, vpid),
143 	    TP_STRUCT__entry(
144 			__field(unsigned long, vpid)
145 	    ),
146 
147 	    TP_fast_assign(
148 			__entry->vpid = vpid;
149 	    ),
150 
151 	    TP_printk("VPID: 0x%08lx", __entry->vpid)
152 );
153 
154 #endif /* _TRACE_KVM_H */
155 
156 #undef TRACE_INCLUDE_PATH
157 #define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm
158 #undef TRACE_INCLUDE_FILE
159 #define TRACE_INCLUDE_FILE trace
160 
161 /* This part must be outside protection */
162 #include <trace/define_trace.h>
163