18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#if !defined(_TRACE_ARM_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
38c2ecf20Sopenharmony_ci#define _TRACE_ARM_ARM64_KVM_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <kvm/arm_arch_timer.h>
68c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
98c2ecf20Sopenharmony_ci#define TRACE_SYSTEM kvm
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci/*
128c2ecf20Sopenharmony_ci * Tracepoints for entry/exit to guest
138c2ecf20Sopenharmony_ci */
148c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_entry,
158c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long vcpu_pc),
168c2ecf20Sopenharmony_ci	TP_ARGS(vcpu_pc),
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
198c2ecf20Sopenharmony_ci		__field(	unsigned long,	vcpu_pc		)
208c2ecf20Sopenharmony_ci	),
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	TP_fast_assign(
238c2ecf20Sopenharmony_ci		__entry->vcpu_pc		= vcpu_pc;
248c2ecf20Sopenharmony_ci	),
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	TP_printk("PC: 0x%016lx", __entry->vcpu_pc)
278c2ecf20Sopenharmony_ci);
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_exit,
308c2ecf20Sopenharmony_ci	TP_PROTO(int ret, unsigned int esr_ec, unsigned long vcpu_pc),
318c2ecf20Sopenharmony_ci	TP_ARGS(ret, esr_ec, vcpu_pc),
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
348c2ecf20Sopenharmony_ci		__field(	int,		ret		)
358c2ecf20Sopenharmony_ci		__field(	unsigned int,	esr_ec		)
368c2ecf20Sopenharmony_ci		__field(	unsigned long,	vcpu_pc		)
378c2ecf20Sopenharmony_ci	),
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	TP_fast_assign(
408c2ecf20Sopenharmony_ci		__entry->ret			= ARM_EXCEPTION_CODE(ret);
418c2ecf20Sopenharmony_ci		__entry->esr_ec = ARM_EXCEPTION_IS_TRAP(ret) ? esr_ec : 0;
428c2ecf20Sopenharmony_ci		__entry->vcpu_pc		= vcpu_pc;
438c2ecf20Sopenharmony_ci	),
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci	TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%016lx",
468c2ecf20Sopenharmony_ci		  __print_symbolic(__entry->ret, kvm_arm_exception_type),
478c2ecf20Sopenharmony_ci		  __entry->esr_ec,
488c2ecf20Sopenharmony_ci		  __print_symbolic(__entry->esr_ec, kvm_arm_exception_class),
498c2ecf20Sopenharmony_ci		  __entry->vcpu_pc)
508c2ecf20Sopenharmony_ci);
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_guest_fault,
538c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long vcpu_pc, unsigned long hsr,
548c2ecf20Sopenharmony_ci		 unsigned long hxfar,
558c2ecf20Sopenharmony_ci		 unsigned long long ipa),
568c2ecf20Sopenharmony_ci	TP_ARGS(vcpu_pc, hsr, hxfar, ipa),
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
598c2ecf20Sopenharmony_ci		__field(	unsigned long,	vcpu_pc		)
608c2ecf20Sopenharmony_ci		__field(	unsigned long,	hsr		)
618c2ecf20Sopenharmony_ci		__field(	unsigned long,	hxfar		)
628c2ecf20Sopenharmony_ci		__field(   unsigned long long,	ipa		)
638c2ecf20Sopenharmony_ci	),
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci	TP_fast_assign(
668c2ecf20Sopenharmony_ci		__entry->vcpu_pc		= vcpu_pc;
678c2ecf20Sopenharmony_ci		__entry->hsr			= hsr;
688c2ecf20Sopenharmony_ci		__entry->hxfar			= hxfar;
698c2ecf20Sopenharmony_ci		__entry->ipa			= ipa;
708c2ecf20Sopenharmony_ci	),
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci	TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#016lx",
738c2ecf20Sopenharmony_ci		  __entry->ipa, __entry->hsr,
748c2ecf20Sopenharmony_ci		  __entry->hxfar, __entry->vcpu_pc)
758c2ecf20Sopenharmony_ci);
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_access_fault,
788c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long ipa),
798c2ecf20Sopenharmony_ci	TP_ARGS(ipa),
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
828c2ecf20Sopenharmony_ci		__field(	unsigned long,	ipa		)
838c2ecf20Sopenharmony_ci	),
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci	TP_fast_assign(
868c2ecf20Sopenharmony_ci		__entry->ipa		= ipa;
878c2ecf20Sopenharmony_ci	),
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci	TP_printk("IPA: %lx", __entry->ipa)
908c2ecf20Sopenharmony_ci);
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_irq_line,
938c2ecf20Sopenharmony_ci	TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level),
948c2ecf20Sopenharmony_ci	TP_ARGS(type, vcpu_idx, irq_num, level),
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
978c2ecf20Sopenharmony_ci		__field(	unsigned int,	type		)
988c2ecf20Sopenharmony_ci		__field(	int,		vcpu_idx	)
998c2ecf20Sopenharmony_ci		__field(	int,		irq_num		)
1008c2ecf20Sopenharmony_ci		__field(	int,		level		)
1018c2ecf20Sopenharmony_ci	),
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_ci	TP_fast_assign(
1048c2ecf20Sopenharmony_ci		__entry->type		= type;
1058c2ecf20Sopenharmony_ci		__entry->vcpu_idx	= vcpu_idx;
1068c2ecf20Sopenharmony_ci		__entry->irq_num	= irq_num;
1078c2ecf20Sopenharmony_ci		__entry->level		= level;
1088c2ecf20Sopenharmony_ci	),
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci	TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d",
1118c2ecf20Sopenharmony_ci		  (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" :
1128c2ecf20Sopenharmony_ci		  (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" :
1138c2ecf20Sopenharmony_ci		  (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN",
1148c2ecf20Sopenharmony_ci		  __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level)
1158c2ecf20Sopenharmony_ci);
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_mmio_emulate,
1188c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long vcpu_pc, unsigned long instr,
1198c2ecf20Sopenharmony_ci		 unsigned long cpsr),
1208c2ecf20Sopenharmony_ci	TP_ARGS(vcpu_pc, instr, cpsr),
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1238c2ecf20Sopenharmony_ci		__field(	unsigned long,	vcpu_pc		)
1248c2ecf20Sopenharmony_ci		__field(	unsigned long,	instr		)
1258c2ecf20Sopenharmony_ci		__field(	unsigned long,	cpsr		)
1268c2ecf20Sopenharmony_ci	),
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci	TP_fast_assign(
1298c2ecf20Sopenharmony_ci		__entry->vcpu_pc		= vcpu_pc;
1308c2ecf20Sopenharmony_ci		__entry->instr			= instr;
1318c2ecf20Sopenharmony_ci		__entry->cpsr			= cpsr;
1328c2ecf20Sopenharmony_ci	),
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci	TP_printk("Emulate MMIO at: 0x%016lx (instr: %08lx, cpsr: %08lx)",
1358c2ecf20Sopenharmony_ci		  __entry->vcpu_pc, __entry->instr, __entry->cpsr)
1368c2ecf20Sopenharmony_ci);
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_unmap_hva_range,
1398c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long start, unsigned long end),
1408c2ecf20Sopenharmony_ci	TP_ARGS(start, end),
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1438c2ecf20Sopenharmony_ci		__field(	unsigned long,	start		)
1448c2ecf20Sopenharmony_ci		__field(	unsigned long,	end		)
1458c2ecf20Sopenharmony_ci	),
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ci	TP_fast_assign(
1488c2ecf20Sopenharmony_ci		__entry->start		= start;
1498c2ecf20Sopenharmony_ci		__entry->end		= end;
1508c2ecf20Sopenharmony_ci	),
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ci	TP_printk("mmu notifier unmap range: %#016lx -- %#016lx",
1538c2ecf20Sopenharmony_ci		  __entry->start, __entry->end)
1548c2ecf20Sopenharmony_ci);
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_set_spte_hva,
1578c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long hva),
1588c2ecf20Sopenharmony_ci	TP_ARGS(hva),
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1618c2ecf20Sopenharmony_ci		__field(	unsigned long,	hva		)
1628c2ecf20Sopenharmony_ci	),
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_ci	TP_fast_assign(
1658c2ecf20Sopenharmony_ci		__entry->hva		= hva;
1668c2ecf20Sopenharmony_ci	),
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_ci	TP_printk("mmu notifier set pte hva: %#016lx", __entry->hva)
1698c2ecf20Sopenharmony_ci);
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_age_hva,
1728c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long start, unsigned long end),
1738c2ecf20Sopenharmony_ci	TP_ARGS(start, end),
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1768c2ecf20Sopenharmony_ci		__field(	unsigned long,	start		)
1778c2ecf20Sopenharmony_ci		__field(	unsigned long,	end		)
1788c2ecf20Sopenharmony_ci	),
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ci	TP_fast_assign(
1818c2ecf20Sopenharmony_ci		__entry->start		= start;
1828c2ecf20Sopenharmony_ci		__entry->end		= end;
1838c2ecf20Sopenharmony_ci	),
1848c2ecf20Sopenharmony_ci
1858c2ecf20Sopenharmony_ci	TP_printk("mmu notifier age hva: %#016lx -- %#016lx",
1868c2ecf20Sopenharmony_ci		  __entry->start, __entry->end)
1878c2ecf20Sopenharmony_ci);
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_test_age_hva,
1908c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long hva),
1918c2ecf20Sopenharmony_ci	TP_ARGS(hva),
1928c2ecf20Sopenharmony_ci
1938c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1948c2ecf20Sopenharmony_ci		__field(	unsigned long,	hva		)
1958c2ecf20Sopenharmony_ci	),
1968c2ecf20Sopenharmony_ci
1978c2ecf20Sopenharmony_ci	TP_fast_assign(
1988c2ecf20Sopenharmony_ci		__entry->hva		= hva;
1998c2ecf20Sopenharmony_ci	),
2008c2ecf20Sopenharmony_ci
2018c2ecf20Sopenharmony_ci	TP_printk("mmu notifier test age hva: %#016lx", __entry->hva)
2028c2ecf20Sopenharmony_ci);
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_set_way_flush,
2058c2ecf20Sopenharmony_ci	    TP_PROTO(unsigned long vcpu_pc, bool cache),
2068c2ecf20Sopenharmony_ci	    TP_ARGS(vcpu_pc, cache),
2078c2ecf20Sopenharmony_ci
2088c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2098c2ecf20Sopenharmony_ci		    __field(	unsigned long,	vcpu_pc		)
2108c2ecf20Sopenharmony_ci		    __field(	bool,		cache		)
2118c2ecf20Sopenharmony_ci	    ),
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_ci	    TP_fast_assign(
2148c2ecf20Sopenharmony_ci		    __entry->vcpu_pc		= vcpu_pc;
2158c2ecf20Sopenharmony_ci		    __entry->cache		= cache;
2168c2ecf20Sopenharmony_ci	    ),
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_ci	    TP_printk("S/W flush at 0x%016lx (cache %s)",
2198c2ecf20Sopenharmony_ci		      __entry->vcpu_pc, __entry->cache ? "on" : "off")
2208c2ecf20Sopenharmony_ci);
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_toggle_cache,
2238c2ecf20Sopenharmony_ci	    TP_PROTO(unsigned long vcpu_pc, bool was, bool now),
2248c2ecf20Sopenharmony_ci	    TP_ARGS(vcpu_pc, was, now),
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2278c2ecf20Sopenharmony_ci		    __field(	unsigned long,	vcpu_pc		)
2288c2ecf20Sopenharmony_ci		    __field(	bool,		was		)
2298c2ecf20Sopenharmony_ci		    __field(	bool,		now		)
2308c2ecf20Sopenharmony_ci	    ),
2318c2ecf20Sopenharmony_ci
2328c2ecf20Sopenharmony_ci	    TP_fast_assign(
2338c2ecf20Sopenharmony_ci		    __entry->vcpu_pc		= vcpu_pc;
2348c2ecf20Sopenharmony_ci		    __entry->was		= was;
2358c2ecf20Sopenharmony_ci		    __entry->now		= now;
2368c2ecf20Sopenharmony_ci	    ),
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_ci	    TP_printk("VM op at 0x%016lx (cache was %s, now %s)",
2398c2ecf20Sopenharmony_ci		      __entry->vcpu_pc, __entry->was ? "on" : "off",
2408c2ecf20Sopenharmony_ci		      __entry->now ? "on" : "off")
2418c2ecf20Sopenharmony_ci);
2428c2ecf20Sopenharmony_ci
2438c2ecf20Sopenharmony_ci/*
2448c2ecf20Sopenharmony_ci * Tracepoints for arch_timer
2458c2ecf20Sopenharmony_ci */
2468c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_timer_update_irq,
2478c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long vcpu_id, __u32 irq, int level),
2488c2ecf20Sopenharmony_ci	TP_ARGS(vcpu_id, irq, level),
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
2518c2ecf20Sopenharmony_ci		__field(	unsigned long,	vcpu_id	)
2528c2ecf20Sopenharmony_ci		__field(	__u32,		irq	)
2538c2ecf20Sopenharmony_ci		__field(	int,		level	)
2548c2ecf20Sopenharmony_ci	),
2558c2ecf20Sopenharmony_ci
2568c2ecf20Sopenharmony_ci	TP_fast_assign(
2578c2ecf20Sopenharmony_ci		__entry->vcpu_id	= vcpu_id;
2588c2ecf20Sopenharmony_ci		__entry->irq		= irq;
2598c2ecf20Sopenharmony_ci		__entry->level		= level;
2608c2ecf20Sopenharmony_ci	),
2618c2ecf20Sopenharmony_ci
2628c2ecf20Sopenharmony_ci	TP_printk("VCPU: %ld, IRQ %d, level %d",
2638c2ecf20Sopenharmony_ci		  __entry->vcpu_id, __entry->irq, __entry->level)
2648c2ecf20Sopenharmony_ci);
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_get_timer_map,
2678c2ecf20Sopenharmony_ci	TP_PROTO(unsigned long vcpu_id, struct timer_map *map),
2688c2ecf20Sopenharmony_ci	TP_ARGS(vcpu_id, map),
2698c2ecf20Sopenharmony_ci
2708c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
2718c2ecf20Sopenharmony_ci		__field(	unsigned long,		vcpu_id	)
2728c2ecf20Sopenharmony_ci		__field(	int,			direct_vtimer	)
2738c2ecf20Sopenharmony_ci		__field(	int,			direct_ptimer	)
2748c2ecf20Sopenharmony_ci		__field(	int,			emul_ptimer	)
2758c2ecf20Sopenharmony_ci	),
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ci	TP_fast_assign(
2788c2ecf20Sopenharmony_ci		__entry->vcpu_id		= vcpu_id;
2798c2ecf20Sopenharmony_ci		__entry->direct_vtimer		= arch_timer_ctx_index(map->direct_vtimer);
2808c2ecf20Sopenharmony_ci		__entry->direct_ptimer =
2818c2ecf20Sopenharmony_ci			(map->direct_ptimer) ? arch_timer_ctx_index(map->direct_ptimer) : -1;
2828c2ecf20Sopenharmony_ci		__entry->emul_ptimer =
2838c2ecf20Sopenharmony_ci			(map->emul_ptimer) ? arch_timer_ctx_index(map->emul_ptimer) : -1;
2848c2ecf20Sopenharmony_ci	),
2858c2ecf20Sopenharmony_ci
2868c2ecf20Sopenharmony_ci	TP_printk("VCPU: %ld, dv: %d, dp: %d, ep: %d",
2878c2ecf20Sopenharmony_ci		  __entry->vcpu_id,
2888c2ecf20Sopenharmony_ci		  __entry->direct_vtimer,
2898c2ecf20Sopenharmony_ci		  __entry->direct_ptimer,
2908c2ecf20Sopenharmony_ci		  __entry->emul_ptimer)
2918c2ecf20Sopenharmony_ci);
2928c2ecf20Sopenharmony_ci
2938c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_timer_save_state,
2948c2ecf20Sopenharmony_ci	TP_PROTO(struct arch_timer_context *ctx),
2958c2ecf20Sopenharmony_ci	TP_ARGS(ctx),
2968c2ecf20Sopenharmony_ci
2978c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
2988c2ecf20Sopenharmony_ci		__field(	unsigned long,		ctl		)
2998c2ecf20Sopenharmony_ci		__field(	unsigned long long,	cval		)
3008c2ecf20Sopenharmony_ci		__field(	int,			timer_idx	)
3018c2ecf20Sopenharmony_ci	),
3028c2ecf20Sopenharmony_ci
3038c2ecf20Sopenharmony_ci	TP_fast_assign(
3048c2ecf20Sopenharmony_ci		__entry->ctl			= timer_get_ctl(ctx);
3058c2ecf20Sopenharmony_ci		__entry->cval			= timer_get_cval(ctx);
3068c2ecf20Sopenharmony_ci		__entry->timer_idx		= arch_timer_ctx_index(ctx);
3078c2ecf20Sopenharmony_ci	),
3088c2ecf20Sopenharmony_ci
3098c2ecf20Sopenharmony_ci	TP_printk("   CTL: %#08lx CVAL: %#16llx arch_timer_ctx_index: %d",
3108c2ecf20Sopenharmony_ci		  __entry->ctl,
3118c2ecf20Sopenharmony_ci		  __entry->cval,
3128c2ecf20Sopenharmony_ci		  __entry->timer_idx)
3138c2ecf20Sopenharmony_ci);
3148c2ecf20Sopenharmony_ci
3158c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_timer_restore_state,
3168c2ecf20Sopenharmony_ci	TP_PROTO(struct arch_timer_context *ctx),
3178c2ecf20Sopenharmony_ci	TP_ARGS(ctx),
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3208c2ecf20Sopenharmony_ci		__field(	unsigned long,		ctl		)
3218c2ecf20Sopenharmony_ci		__field(	unsigned long long,	cval		)
3228c2ecf20Sopenharmony_ci		__field(	int,			timer_idx	)
3238c2ecf20Sopenharmony_ci	),
3248c2ecf20Sopenharmony_ci
3258c2ecf20Sopenharmony_ci	TP_fast_assign(
3268c2ecf20Sopenharmony_ci		__entry->ctl			= timer_get_ctl(ctx);
3278c2ecf20Sopenharmony_ci		__entry->cval			= timer_get_cval(ctx);
3288c2ecf20Sopenharmony_ci		__entry->timer_idx		= arch_timer_ctx_index(ctx);
3298c2ecf20Sopenharmony_ci	),
3308c2ecf20Sopenharmony_ci
3318c2ecf20Sopenharmony_ci	TP_printk("CTL: %#08lx CVAL: %#16llx arch_timer_ctx_index: %d",
3328c2ecf20Sopenharmony_ci		  __entry->ctl,
3338c2ecf20Sopenharmony_ci		  __entry->cval,
3348c2ecf20Sopenharmony_ci		  __entry->timer_idx)
3358c2ecf20Sopenharmony_ci);
3368c2ecf20Sopenharmony_ci
3378c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_timer_hrtimer_expire,
3388c2ecf20Sopenharmony_ci	TP_PROTO(struct arch_timer_context *ctx),
3398c2ecf20Sopenharmony_ci	TP_ARGS(ctx),
3408c2ecf20Sopenharmony_ci
3418c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3428c2ecf20Sopenharmony_ci		__field(	int,			timer_idx	)
3438c2ecf20Sopenharmony_ci	),
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ci	TP_fast_assign(
3468c2ecf20Sopenharmony_ci		__entry->timer_idx		= arch_timer_ctx_index(ctx);
3478c2ecf20Sopenharmony_ci	),
3488c2ecf20Sopenharmony_ci
3498c2ecf20Sopenharmony_ci	TP_printk("arch_timer_ctx_index: %d", __entry->timer_idx)
3508c2ecf20Sopenharmony_ci);
3518c2ecf20Sopenharmony_ci
3528c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_timer_emulate,
3538c2ecf20Sopenharmony_ci	TP_PROTO(struct arch_timer_context *ctx, bool should_fire),
3548c2ecf20Sopenharmony_ci	TP_ARGS(ctx, should_fire),
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3578c2ecf20Sopenharmony_ci		__field(	int,			timer_idx	)
3588c2ecf20Sopenharmony_ci		__field(	bool,			should_fire	)
3598c2ecf20Sopenharmony_ci	),
3608c2ecf20Sopenharmony_ci
3618c2ecf20Sopenharmony_ci	TP_fast_assign(
3628c2ecf20Sopenharmony_ci		__entry->timer_idx		= arch_timer_ctx_index(ctx);
3638c2ecf20Sopenharmony_ci		__entry->should_fire		= should_fire;
3648c2ecf20Sopenharmony_ci	),
3658c2ecf20Sopenharmony_ci
3668c2ecf20Sopenharmony_ci	TP_printk("arch_timer_ctx_index: %d (should_fire: %d)",
3678c2ecf20Sopenharmony_ci		  __entry->timer_idx, __entry->should_fire)
3688c2ecf20Sopenharmony_ci);
3698c2ecf20Sopenharmony_ci
3708c2ecf20Sopenharmony_ci#endif /* _TRACE_ARM_ARM64_KVM_H */
3718c2ecf20Sopenharmony_ci
3728c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH
3738c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH .
3748c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE
3758c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_arm
3768c2ecf20Sopenharmony_ci
3778c2ecf20Sopenharmony_ci/* This part must be outside protection */
3788c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
379