Merge tag 'rproc-v4.20' of git://github.com/andersson/remoteproc
[sfrench/cifs-2.6.git] / virt / kvm / arm / trace.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
3 #define _TRACE_KVM_H
4
5 #include <linux/tracepoint.h>
6
7 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM kvm
9
10 /*
11  * Tracepoints for entry/exit to guest
12  */
13 TRACE_EVENT(kvm_entry,
14         TP_PROTO(unsigned long vcpu_pc),
15         TP_ARGS(vcpu_pc),
16
17         TP_STRUCT__entry(
18                 __field(        unsigned long,  vcpu_pc         )
19         ),
20
21         TP_fast_assign(
22                 __entry->vcpu_pc                = vcpu_pc;
23         ),
24
25         TP_printk("PC: 0x%08lx", __entry->vcpu_pc)
26 );
27
28 TRACE_EVENT(kvm_exit,
29         TP_PROTO(int idx, unsigned int exit_reason, unsigned long vcpu_pc),
30         TP_ARGS(idx, exit_reason, vcpu_pc),
31
32         TP_STRUCT__entry(
33                 __field(        int,            idx             )
34                 __field(        unsigned int,   exit_reason     )
35                 __field(        unsigned long,  vcpu_pc         )
36         ),
37
38         TP_fast_assign(
39                 __entry->idx                    = idx;
40                 __entry->exit_reason            = exit_reason;
41                 __entry->vcpu_pc                = vcpu_pc;
42         ),
43
44         TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%08lx",
45                   __print_symbolic(__entry->idx, kvm_arm_exception_type),
46                   __entry->exit_reason,
47                   __print_symbolic(__entry->exit_reason, kvm_arm_exception_class),
48                   __entry->vcpu_pc)
49 );
50
51 TRACE_EVENT(kvm_guest_fault,
52         TP_PROTO(unsigned long vcpu_pc, unsigned long hsr,
53                  unsigned long hxfar,
54                  unsigned long long ipa),
55         TP_ARGS(vcpu_pc, hsr, hxfar, ipa),
56
57         TP_STRUCT__entry(
58                 __field(        unsigned long,  vcpu_pc         )
59                 __field(        unsigned long,  hsr             )
60                 __field(        unsigned long,  hxfar           )
61                 __field(   unsigned long long,  ipa             )
62         ),
63
64         TP_fast_assign(
65                 __entry->vcpu_pc                = vcpu_pc;
66                 __entry->hsr                    = hsr;
67                 __entry->hxfar                  = hxfar;
68                 __entry->ipa                    = ipa;
69         ),
70
71         TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#08lx",
72                   __entry->ipa, __entry->hsr,
73                   __entry->hxfar, __entry->vcpu_pc)
74 );
75
76 TRACE_EVENT(kvm_access_fault,
77         TP_PROTO(unsigned long ipa),
78         TP_ARGS(ipa),
79
80         TP_STRUCT__entry(
81                 __field(        unsigned long,  ipa             )
82         ),
83
84         TP_fast_assign(
85                 __entry->ipa            = ipa;
86         ),
87
88         TP_printk("IPA: %lx", __entry->ipa)
89 );
90
91 TRACE_EVENT(kvm_irq_line,
92         TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level),
93         TP_ARGS(type, vcpu_idx, irq_num, level),
94
95         TP_STRUCT__entry(
96                 __field(        unsigned int,   type            )
97                 __field(        int,            vcpu_idx        )
98                 __field(        int,            irq_num         )
99                 __field(        int,            level           )
100         ),
101
102         TP_fast_assign(
103                 __entry->type           = type;
104                 __entry->vcpu_idx       = vcpu_idx;
105                 __entry->irq_num        = irq_num;
106                 __entry->level          = level;
107         ),
108
109         TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d",
110                   (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" :
111                   (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" :
112                   (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN",
113                   __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level)
114 );
115
116 TRACE_EVENT(kvm_mmio_emulate,
117         TP_PROTO(unsigned long vcpu_pc, unsigned long instr,
118                  unsigned long cpsr),
119         TP_ARGS(vcpu_pc, instr, cpsr),
120
121         TP_STRUCT__entry(
122                 __field(        unsigned long,  vcpu_pc         )
123                 __field(        unsigned long,  instr           )
124                 __field(        unsigned long,  cpsr            )
125         ),
126
127         TP_fast_assign(
128                 __entry->vcpu_pc                = vcpu_pc;
129                 __entry->instr                  = instr;
130                 __entry->cpsr                   = cpsr;
131         ),
132
133         TP_printk("Emulate MMIO at: 0x%08lx (instr: %08lx, cpsr: %08lx)",
134                   __entry->vcpu_pc, __entry->instr, __entry->cpsr)
135 );
136
137 TRACE_EVENT(kvm_unmap_hva_range,
138         TP_PROTO(unsigned long start, unsigned long end),
139         TP_ARGS(start, end),
140
141         TP_STRUCT__entry(
142                 __field(        unsigned long,  start           )
143                 __field(        unsigned long,  end             )
144         ),
145
146         TP_fast_assign(
147                 __entry->start          = start;
148                 __entry->end            = end;
149         ),
150
151         TP_printk("mmu notifier unmap range: %#08lx -- %#08lx",
152                   __entry->start, __entry->end)
153 );
154
155 TRACE_EVENT(kvm_set_spte_hva,
156         TP_PROTO(unsigned long hva),
157         TP_ARGS(hva),
158
159         TP_STRUCT__entry(
160                 __field(        unsigned long,  hva             )
161         ),
162
163         TP_fast_assign(
164                 __entry->hva            = hva;
165         ),
166
167         TP_printk("mmu notifier set pte hva: %#08lx", __entry->hva)
168 );
169
170 TRACE_EVENT(kvm_age_hva,
171         TP_PROTO(unsigned long start, unsigned long end),
172         TP_ARGS(start, end),
173
174         TP_STRUCT__entry(
175                 __field(        unsigned long,  start           )
176                 __field(        unsigned long,  end             )
177         ),
178
179         TP_fast_assign(
180                 __entry->start          = start;
181                 __entry->end            = end;
182         ),
183
184         TP_printk("mmu notifier age hva: %#08lx -- %#08lx",
185                   __entry->start, __entry->end)
186 );
187
188 TRACE_EVENT(kvm_test_age_hva,
189         TP_PROTO(unsigned long hva),
190         TP_ARGS(hva),
191
192         TP_STRUCT__entry(
193                 __field(        unsigned long,  hva             )
194         ),
195
196         TP_fast_assign(
197                 __entry->hva            = hva;
198         ),
199
200         TP_printk("mmu notifier test age hva: %#08lx", __entry->hva)
201 );
202
203 TRACE_EVENT(kvm_set_way_flush,
204             TP_PROTO(unsigned long vcpu_pc, bool cache),
205             TP_ARGS(vcpu_pc, cache),
206
207             TP_STRUCT__entry(
208                     __field(    unsigned long,  vcpu_pc         )
209                     __field(    bool,           cache           )
210             ),
211
212             TP_fast_assign(
213                     __entry->vcpu_pc            = vcpu_pc;
214                     __entry->cache              = cache;
215             ),
216
217             TP_printk("S/W flush at 0x%016lx (cache %s)",
218                       __entry->vcpu_pc, __entry->cache ? "on" : "off")
219 );
220
221 TRACE_EVENT(kvm_toggle_cache,
222             TP_PROTO(unsigned long vcpu_pc, bool was, bool now),
223             TP_ARGS(vcpu_pc, was, now),
224
225             TP_STRUCT__entry(
226                     __field(    unsigned long,  vcpu_pc         )
227                     __field(    bool,           was             )
228                     __field(    bool,           now             )
229             ),
230
231             TP_fast_assign(
232                     __entry->vcpu_pc            = vcpu_pc;
233                     __entry->was                = was;
234                     __entry->now                = now;
235             ),
236
237             TP_printk("VM op at 0x%016lx (cache was %s, now %s)",
238                       __entry->vcpu_pc, __entry->was ? "on" : "off",
239                       __entry->now ? "on" : "off")
240 );
241
242 /*
243  * Tracepoints for arch_timer
244  */
245 TRACE_EVENT(kvm_timer_update_irq,
246         TP_PROTO(unsigned long vcpu_id, __u32 irq, int level),
247         TP_ARGS(vcpu_id, irq, level),
248
249         TP_STRUCT__entry(
250                 __field(        unsigned long,  vcpu_id )
251                 __field(        __u32,          irq     )
252                 __field(        int,            level   )
253         ),
254
255         TP_fast_assign(
256                 __entry->vcpu_id        = vcpu_id;
257                 __entry->irq            = irq;
258                 __entry->level          = level;
259         ),
260
261         TP_printk("VCPU: %ld, IRQ %d, level %d",
262                   __entry->vcpu_id, __entry->irq, __entry->level)
263 );
264
265 #endif /* _TRACE_KVM_H */
266
267 #undef TRACE_INCLUDE_PATH
268 #define TRACE_INCLUDE_PATH ../../../virt/kvm/arm
269 #undef TRACE_INCLUDE_FILE
270 #define TRACE_INCLUDE_FILE trace
271
272 /* This part must be outside protection */
273 #include <trace/define_trace.h>