Merge branch 'for-6.9/amd-sfh' into for-linus
[sfrench/cifs-2.6.git] / arch / loongarch / kvm / trace.h
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 #define KVM_TRACE_AUX_LSX               2
106 #define KVM_TRACE_AUX_LASX              3
107
108 #define kvm_trace_symbol_aux_op                         \
109         { KVM_TRACE_AUX_SAVE,           "save" },       \
110         { KVM_TRACE_AUX_RESTORE,        "restore" },    \
111         { KVM_TRACE_AUX_ENABLE,         "enable" },     \
112         { KVM_TRACE_AUX_DISABLE,        "disable" },    \
113         { KVM_TRACE_AUX_DISCARD,        "discard" }
114
115 #define kvm_trace_symbol_aux_state                      \
116         { KVM_TRACE_AUX_FPU,     "FPU" },               \
117         { KVM_TRACE_AUX_LSX,     "LSX" },               \
118         { KVM_TRACE_AUX_LASX,    "LASX" }
119
120 TRACE_EVENT(kvm_aux,
121             TP_PROTO(struct kvm_vcpu *vcpu, unsigned int op,
122                      unsigned int state),
123             TP_ARGS(vcpu, op, state),
124             TP_STRUCT__entry(
125                         __field(unsigned long, pc)
126                         __field(u8, op)
127                         __field(u8, state)
128             ),
129
130             TP_fast_assign(
131                         __entry->pc = vcpu->arch.pc;
132                         __entry->op = op;
133                         __entry->state = state;
134             ),
135
136             TP_printk("%s %s PC: 0x%08lx",
137                       __print_symbolic(__entry->op,
138                                        kvm_trace_symbol_aux_op),
139                       __print_symbolic(__entry->state,
140                                        kvm_trace_symbol_aux_state),
141                       __entry->pc)
142 );
143
144 TRACE_EVENT(kvm_vpid_change,
145             TP_PROTO(struct kvm_vcpu *vcpu, unsigned long vpid),
146             TP_ARGS(vcpu, vpid),
147             TP_STRUCT__entry(
148                         __field(unsigned long, vpid)
149             ),
150
151             TP_fast_assign(
152                         __entry->vpid = vpid;
153             ),
154
155             TP_printk("VPID: 0x%08lx", __entry->vpid)
156 );
157
158 #endif /* _TRACE_KVM_H */
159
160 #undef TRACE_INCLUDE_PATH
161 #define TRACE_INCLUDE_PATH ../../arch/loongarch/kvm
162 #undef TRACE_INCLUDE_FILE
163 #define TRACE_INCLUDE_FILE trace
164
165 /* This part must be outside protection */
166 #include <trace/define_trace.h>