Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  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 <kvm/arm_arch_timer.h>
  6#include <linux/tracepoint.h>
  7
  8#undef TRACE_SYSTEM
  9#define TRACE_SYSTEM kvm
 10
 11/*
 12 * Tracepoints for entry/exit to guest
 13 */
 14TRACE_EVENT(kvm_entry,
 15	TP_PROTO(unsigned long vcpu_pc),
 16	TP_ARGS(vcpu_pc),
 17
 18	TP_STRUCT__entry(
 19		__field(	unsigned long,	vcpu_pc		)
 20	),
 21
 22	TP_fast_assign(
 23		__entry->vcpu_pc		= vcpu_pc;
 24	),
 25
 26	TP_printk("PC: 0x%08lx", __entry->vcpu_pc)
 27);
 28
 29TRACE_EVENT(kvm_exit,
 30	TP_PROTO(int ret, unsigned int esr_ec, unsigned long vcpu_pc),
 31	TP_ARGS(ret, esr_ec, vcpu_pc),
 32
 33	TP_STRUCT__entry(
 34		__field(	int,		ret		)
 35		__field(	unsigned int,	esr_ec		)
 36		__field(	unsigned long,	vcpu_pc		)
 37	),
 38
 39	TP_fast_assign(
 40		__entry->ret			= ARM_EXCEPTION_CODE(ret);
 41		__entry->esr_ec = ARM_EXCEPTION_IS_TRAP(ret) ? esr_ec : 0;
 42		__entry->vcpu_pc		= vcpu_pc;
 43	),
 44
 45	TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%08lx",
 46		  __print_symbolic(__entry->ret, kvm_arm_exception_type),
 47		  __entry->esr_ec,
 48		  __print_symbolic(__entry->esr_ec, kvm_arm_exception_class),
 49		  __entry->vcpu_pc)
 50);
 51
 52TRACE_EVENT(kvm_guest_fault,
 53	TP_PROTO(unsigned long vcpu_pc, unsigned long hsr,
 54		 unsigned long hxfar,
 55		 unsigned long long ipa),
 56	TP_ARGS(vcpu_pc, hsr, hxfar, ipa),
 57
 58	TP_STRUCT__entry(
 59		__field(	unsigned long,	vcpu_pc		)
 60		__field(	unsigned long,	hsr		)
 61		__field(	unsigned long,	hxfar		)
 62		__field(   unsigned long long,	ipa		)
 63	),
 64
 65	TP_fast_assign(
 66		__entry->vcpu_pc		= vcpu_pc;
 67		__entry->hsr			= hsr;
 68		__entry->hxfar			= hxfar;
 69		__entry->ipa			= ipa;
 70	),
 71
 72	TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#08lx",
 73		  __entry->ipa, __entry->hsr,
 74		  __entry->hxfar, __entry->vcpu_pc)
 75);
 76
 77TRACE_EVENT(kvm_access_fault,
 78	TP_PROTO(unsigned long ipa),
 79	TP_ARGS(ipa),
 80
 81	TP_STRUCT__entry(
 82		__field(	unsigned long,	ipa		)
 83	),
 84
 85	TP_fast_assign(
 86		__entry->ipa		= ipa;
 87	),
 88
 89	TP_printk("IPA: %lx", __entry->ipa)
 90);
 91
 92TRACE_EVENT(kvm_irq_line,
 93	TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level),
 94	TP_ARGS(type, vcpu_idx, irq_num, level),
 95
 96	TP_STRUCT__entry(
 97		__field(	unsigned int,	type		)
 98		__field(	int,		vcpu_idx	)
 99		__field(	int,		irq_num		)
100		__field(	int,		level		)
101	),
102
103	TP_fast_assign(
104		__entry->type		= type;
105		__entry->vcpu_idx	= vcpu_idx;
106		__entry->irq_num	= irq_num;
107		__entry->level		= level;
108	),
109
110	TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d",
111		  (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" :
112		  (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" :
113		  (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN",
114		  __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level)
115);
116
117TRACE_EVENT(kvm_mmio_emulate,
118	TP_PROTO(unsigned long vcpu_pc, unsigned long instr,
119		 unsigned long cpsr),
120	TP_ARGS(vcpu_pc, instr, cpsr),
121
122	TP_STRUCT__entry(
123		__field(	unsigned long,	vcpu_pc		)
124		__field(	unsigned long,	instr		)
125		__field(	unsigned long,	cpsr		)
126	),
127
128	TP_fast_assign(
129		__entry->vcpu_pc		= vcpu_pc;
130		__entry->instr			= instr;
131		__entry->cpsr			= cpsr;
132	),
133
134	TP_printk("Emulate MMIO at: 0x%08lx (instr: %08lx, cpsr: %08lx)",
135		  __entry->vcpu_pc, __entry->instr, __entry->cpsr)
136);
137
138TRACE_EVENT(kvm_unmap_hva_range,
139	TP_PROTO(unsigned long start, unsigned long end),
140	TP_ARGS(start, end),
141
142	TP_STRUCT__entry(
143		__field(	unsigned long,	start		)
144		__field(	unsigned long,	end		)
145	),
146
147	TP_fast_assign(
148		__entry->start		= start;
149		__entry->end		= end;
150	),
151
152	TP_printk("mmu notifier unmap range: %#08lx -- %#08lx",
153		  __entry->start, __entry->end)
154);
155
156TRACE_EVENT(kvm_set_spte_hva,
157	TP_PROTO(unsigned long hva),
158	TP_ARGS(hva),
159
160	TP_STRUCT__entry(
161		__field(	unsigned long,	hva		)
162	),
163
164	TP_fast_assign(
165		__entry->hva		= hva;
166	),
167
168	TP_printk("mmu notifier set pte hva: %#08lx", __entry->hva)
169);
170
171TRACE_EVENT(kvm_age_hva,
172	TP_PROTO(unsigned long start, unsigned long end),
173	TP_ARGS(start, end),
174
175	TP_STRUCT__entry(
176		__field(	unsigned long,	start		)
177		__field(	unsigned long,	end		)
178	),
179
180	TP_fast_assign(
181		__entry->start		= start;
182		__entry->end		= end;
183	),
184
185	TP_printk("mmu notifier age hva: %#08lx -- %#08lx",
186		  __entry->start, __entry->end)
187);
188
189TRACE_EVENT(kvm_test_age_hva,
190	TP_PROTO(unsigned long hva),
191	TP_ARGS(hva),
192
193	TP_STRUCT__entry(
194		__field(	unsigned long,	hva		)
195	),
196
197	TP_fast_assign(
198		__entry->hva		= hva;
199	),
200
201	TP_printk("mmu notifier test age hva: %#08lx", __entry->hva)
202);
203
204TRACE_EVENT(kvm_set_way_flush,
205	    TP_PROTO(unsigned long vcpu_pc, bool cache),
206	    TP_ARGS(vcpu_pc, cache),
207
208	    TP_STRUCT__entry(
209		    __field(	unsigned long,	vcpu_pc		)
210		    __field(	bool,		cache		)
211	    ),
212
213	    TP_fast_assign(
214		    __entry->vcpu_pc		= vcpu_pc;
215		    __entry->cache		= cache;
216	    ),
217
218	    TP_printk("S/W flush at 0x%016lx (cache %s)",
219		      __entry->vcpu_pc, __entry->cache ? "on" : "off")
220);
221
222TRACE_EVENT(kvm_toggle_cache,
223	    TP_PROTO(unsigned long vcpu_pc, bool was, bool now),
224	    TP_ARGS(vcpu_pc, was, now),
225
226	    TP_STRUCT__entry(
227		    __field(	unsigned long,	vcpu_pc		)
228		    __field(	bool,		was		)
229		    __field(	bool,		now		)
230	    ),
231
232	    TP_fast_assign(
233		    __entry->vcpu_pc		= vcpu_pc;
234		    __entry->was		= was;
235		    __entry->now		= now;
236	    ),
237
238	    TP_printk("VM op at 0x%016lx (cache was %s, now %s)",
239		      __entry->vcpu_pc, __entry->was ? "on" : "off",
240		      __entry->now ? "on" : "off")
241);
242
243/*
244 * Tracepoints for arch_timer
245 */
246TRACE_EVENT(kvm_timer_update_irq,
247	TP_PROTO(unsigned long vcpu_id, __u32 irq, int level),
248	TP_ARGS(vcpu_id, irq, level),
249
250	TP_STRUCT__entry(
251		__field(	unsigned long,	vcpu_id	)
252		__field(	__u32,		irq	)
253		__field(	int,		level	)
254	),
255
256	TP_fast_assign(
257		__entry->vcpu_id	= vcpu_id;
258		__entry->irq		= irq;
259		__entry->level		= level;
260	),
261
262	TP_printk("VCPU: %ld, IRQ %d, level %d",
263		  __entry->vcpu_id, __entry->irq, __entry->level)
264);
265
266TRACE_EVENT(kvm_get_timer_map,
267	TP_PROTO(unsigned long vcpu_id, struct timer_map *map),
268	TP_ARGS(vcpu_id, map),
269
270	TP_STRUCT__entry(
271		__field(	unsigned long,		vcpu_id	)
272		__field(	int,			direct_vtimer	)
273		__field(	int,			direct_ptimer	)
274		__field(	int,			emul_ptimer	)
275	),
276
277	TP_fast_assign(
278		__entry->vcpu_id		= vcpu_id;
279		__entry->direct_vtimer		= arch_timer_ctx_index(map->direct_vtimer);
280		__entry->direct_ptimer =
281			(map->direct_ptimer) ? arch_timer_ctx_index(map->direct_ptimer) : -1;
282		__entry->emul_ptimer =
283			(map->emul_ptimer) ? arch_timer_ctx_index(map->emul_ptimer) : -1;
284	),
285
286	TP_printk("VCPU: %ld, dv: %d, dp: %d, ep: %d",
287		  __entry->vcpu_id,
288		  __entry->direct_vtimer,
289		  __entry->direct_ptimer,
290		  __entry->emul_ptimer)
291);
292
293TRACE_EVENT(kvm_timer_save_state,
294	TP_PROTO(struct arch_timer_context *ctx),
295	TP_ARGS(ctx),
296
297	TP_STRUCT__entry(
298		__field(	unsigned long,		ctl		)
299		__field(	unsigned long long,	cval		)
300		__field(	int,			timer_idx	)
301	),
302
303	TP_fast_assign(
304		__entry->ctl			= ctx->cnt_ctl;
305		__entry->cval			= ctx->cnt_cval;
306		__entry->timer_idx		= arch_timer_ctx_index(ctx);
307	),
308
309	TP_printk("   CTL: %#08lx CVAL: %#16llx arch_timer_ctx_index: %d",
310		  __entry->ctl,
311		  __entry->cval,
312		  __entry->timer_idx)
313);
314
315TRACE_EVENT(kvm_timer_restore_state,
316	TP_PROTO(struct arch_timer_context *ctx),
317	TP_ARGS(ctx),
318
319	TP_STRUCT__entry(
320		__field(	unsigned long,		ctl		)
321		__field(	unsigned long long,	cval		)
322		__field(	int,			timer_idx	)
323	),
324
325	TP_fast_assign(
326		__entry->ctl			= ctx->cnt_ctl;
327		__entry->cval			= ctx->cnt_cval;
328		__entry->timer_idx		= arch_timer_ctx_index(ctx);
329	),
330
331	TP_printk("CTL: %#08lx CVAL: %#16llx arch_timer_ctx_index: %d",
332		  __entry->ctl,
333		  __entry->cval,
334		  __entry->timer_idx)
335);
336
337TRACE_EVENT(kvm_timer_hrtimer_expire,
338	TP_PROTO(struct arch_timer_context *ctx),
339	TP_ARGS(ctx),
340
341	TP_STRUCT__entry(
342		__field(	int,			timer_idx	)
343	),
344
345	TP_fast_assign(
346		__entry->timer_idx		= arch_timer_ctx_index(ctx);
347	),
348
349	TP_printk("arch_timer_ctx_index: %d", __entry->timer_idx)
350);
351
352TRACE_EVENT(kvm_timer_emulate,
353	TP_PROTO(struct arch_timer_context *ctx, bool should_fire),
354	TP_ARGS(ctx, should_fire),
355
356	TP_STRUCT__entry(
357		__field(	int,			timer_idx	)
358		__field(	bool,			should_fire	)
359	),
360
361	TP_fast_assign(
362		__entry->timer_idx		= arch_timer_ctx_index(ctx);
363		__entry->should_fire		= should_fire;
364	),
365
366	TP_printk("arch_timer_ctx_index: %d (should_fire: %d)",
367		  __entry->timer_idx, __entry->should_fire)
368);
369
370#endif /* _TRACE_KVM_H */
371
372#undef TRACE_INCLUDE_PATH
373#define TRACE_INCLUDE_PATH ../../virt/kvm/arm
374#undef TRACE_INCLUDE_FILE
375#define TRACE_INCLUDE_FILE trace
376
377/* This part must be outside protection */
378#include <trace/define_trace.h>