162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#if !defined(_TRACE_ARM_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 362306a36Sopenharmony_ci#define _TRACE_ARM_ARM64_KVM_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <asm/kvm_emulate.h> 662306a36Sopenharmony_ci#include <kvm/arm_arch_timer.h> 762306a36Sopenharmony_ci#include <linux/tracepoint.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#undef TRACE_SYSTEM 1062306a36Sopenharmony_ci#define TRACE_SYSTEM kvm 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * Tracepoints for entry/exit to guest 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ciTRACE_EVENT(kvm_entry, 1662306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_pc), 1762306a36Sopenharmony_ci TP_ARGS(vcpu_pc), 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci TP_STRUCT__entry( 2062306a36Sopenharmony_ci __field( unsigned long, vcpu_pc ) 2162306a36Sopenharmony_ci ), 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci TP_fast_assign( 2462306a36Sopenharmony_ci __entry->vcpu_pc = vcpu_pc; 2562306a36Sopenharmony_ci ), 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci TP_printk("PC: 0x%016lx", __entry->vcpu_pc) 2862306a36Sopenharmony_ci); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciTRACE_EVENT(kvm_exit, 3162306a36Sopenharmony_ci TP_PROTO(int ret, unsigned int esr_ec, unsigned long vcpu_pc), 3262306a36Sopenharmony_ci TP_ARGS(ret, esr_ec, vcpu_pc), 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci TP_STRUCT__entry( 3562306a36Sopenharmony_ci __field( int, ret ) 3662306a36Sopenharmony_ci __field( unsigned int, esr_ec ) 3762306a36Sopenharmony_ci __field( unsigned long, vcpu_pc ) 3862306a36Sopenharmony_ci ), 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci TP_fast_assign( 4162306a36Sopenharmony_ci __entry->ret = ARM_EXCEPTION_CODE(ret); 4262306a36Sopenharmony_ci __entry->esr_ec = ARM_EXCEPTION_IS_TRAP(ret) ? esr_ec : 0; 4362306a36Sopenharmony_ci __entry->vcpu_pc = vcpu_pc; 4462306a36Sopenharmony_ci ), 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%016lx", 4762306a36Sopenharmony_ci __print_symbolic(__entry->ret, kvm_arm_exception_type), 4862306a36Sopenharmony_ci __entry->esr_ec, 4962306a36Sopenharmony_ci __print_symbolic(__entry->esr_ec, kvm_arm_exception_class), 5062306a36Sopenharmony_ci __entry->vcpu_pc) 5162306a36Sopenharmony_ci); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciTRACE_EVENT(kvm_guest_fault, 5462306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_pc, unsigned long hsr, 5562306a36Sopenharmony_ci unsigned long hxfar, 5662306a36Sopenharmony_ci unsigned long long ipa), 5762306a36Sopenharmony_ci TP_ARGS(vcpu_pc, hsr, hxfar, ipa), 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci TP_STRUCT__entry( 6062306a36Sopenharmony_ci __field( unsigned long, vcpu_pc ) 6162306a36Sopenharmony_ci __field( unsigned long, hsr ) 6262306a36Sopenharmony_ci __field( unsigned long, hxfar ) 6362306a36Sopenharmony_ci __field( unsigned long long, ipa ) 6462306a36Sopenharmony_ci ), 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci TP_fast_assign( 6762306a36Sopenharmony_ci __entry->vcpu_pc = vcpu_pc; 6862306a36Sopenharmony_ci __entry->hsr = hsr; 6962306a36Sopenharmony_ci __entry->hxfar = hxfar; 7062306a36Sopenharmony_ci __entry->ipa = ipa; 7162306a36Sopenharmony_ci ), 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#016lx", 7462306a36Sopenharmony_ci __entry->ipa, __entry->hsr, 7562306a36Sopenharmony_ci __entry->hxfar, __entry->vcpu_pc) 7662306a36Sopenharmony_ci); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciTRACE_EVENT(kvm_access_fault, 7962306a36Sopenharmony_ci TP_PROTO(unsigned long ipa), 8062306a36Sopenharmony_ci TP_ARGS(ipa), 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci TP_STRUCT__entry( 8362306a36Sopenharmony_ci __field( unsigned long, ipa ) 8462306a36Sopenharmony_ci ), 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci TP_fast_assign( 8762306a36Sopenharmony_ci __entry->ipa = ipa; 8862306a36Sopenharmony_ci ), 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci TP_printk("IPA: %lx", __entry->ipa) 9162306a36Sopenharmony_ci); 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ciTRACE_EVENT(kvm_irq_line, 9462306a36Sopenharmony_ci TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level), 9562306a36Sopenharmony_ci TP_ARGS(type, vcpu_idx, irq_num, level), 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci TP_STRUCT__entry( 9862306a36Sopenharmony_ci __field( unsigned int, type ) 9962306a36Sopenharmony_ci __field( int, vcpu_idx ) 10062306a36Sopenharmony_ci __field( int, irq_num ) 10162306a36Sopenharmony_ci __field( int, level ) 10262306a36Sopenharmony_ci ), 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci TP_fast_assign( 10562306a36Sopenharmony_ci __entry->type = type; 10662306a36Sopenharmony_ci __entry->vcpu_idx = vcpu_idx; 10762306a36Sopenharmony_ci __entry->irq_num = irq_num; 10862306a36Sopenharmony_ci __entry->level = level; 10962306a36Sopenharmony_ci ), 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d", 11262306a36Sopenharmony_ci (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" : 11362306a36Sopenharmony_ci (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" : 11462306a36Sopenharmony_ci (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN", 11562306a36Sopenharmony_ci __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level) 11662306a36Sopenharmony_ci); 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ciTRACE_EVENT(kvm_mmio_emulate, 11962306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_pc, unsigned long instr, 12062306a36Sopenharmony_ci unsigned long cpsr), 12162306a36Sopenharmony_ci TP_ARGS(vcpu_pc, instr, cpsr), 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci TP_STRUCT__entry( 12462306a36Sopenharmony_ci __field( unsigned long, vcpu_pc ) 12562306a36Sopenharmony_ci __field( unsigned long, instr ) 12662306a36Sopenharmony_ci __field( unsigned long, cpsr ) 12762306a36Sopenharmony_ci ), 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci TP_fast_assign( 13062306a36Sopenharmony_ci __entry->vcpu_pc = vcpu_pc; 13162306a36Sopenharmony_ci __entry->instr = instr; 13262306a36Sopenharmony_ci __entry->cpsr = cpsr; 13362306a36Sopenharmony_ci ), 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci TP_printk("Emulate MMIO at: 0x%016lx (instr: %08lx, cpsr: %08lx)", 13662306a36Sopenharmony_ci __entry->vcpu_pc, __entry->instr, __entry->cpsr) 13762306a36Sopenharmony_ci); 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ciTRACE_EVENT(kvm_set_way_flush, 14062306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_pc, bool cache), 14162306a36Sopenharmony_ci TP_ARGS(vcpu_pc, cache), 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci TP_STRUCT__entry( 14462306a36Sopenharmony_ci __field( unsigned long, vcpu_pc ) 14562306a36Sopenharmony_ci __field( bool, cache ) 14662306a36Sopenharmony_ci ), 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci TP_fast_assign( 14962306a36Sopenharmony_ci __entry->vcpu_pc = vcpu_pc; 15062306a36Sopenharmony_ci __entry->cache = cache; 15162306a36Sopenharmony_ci ), 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci TP_printk("S/W flush at 0x%016lx (cache %s)", 15462306a36Sopenharmony_ci __entry->vcpu_pc, __entry->cache ? "on" : "off") 15562306a36Sopenharmony_ci); 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ciTRACE_EVENT(kvm_toggle_cache, 15862306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_pc, bool was, bool now), 15962306a36Sopenharmony_ci TP_ARGS(vcpu_pc, was, now), 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci TP_STRUCT__entry( 16262306a36Sopenharmony_ci __field( unsigned long, vcpu_pc ) 16362306a36Sopenharmony_ci __field( bool, was ) 16462306a36Sopenharmony_ci __field( bool, now ) 16562306a36Sopenharmony_ci ), 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci TP_fast_assign( 16862306a36Sopenharmony_ci __entry->vcpu_pc = vcpu_pc; 16962306a36Sopenharmony_ci __entry->was = was; 17062306a36Sopenharmony_ci __entry->now = now; 17162306a36Sopenharmony_ci ), 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci TP_printk("VM op at 0x%016lx (cache was %s, now %s)", 17462306a36Sopenharmony_ci __entry->vcpu_pc, __entry->was ? "on" : "off", 17562306a36Sopenharmony_ci __entry->now ? "on" : "off") 17662306a36Sopenharmony_ci); 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci/* 17962306a36Sopenharmony_ci * Tracepoints for arch_timer 18062306a36Sopenharmony_ci */ 18162306a36Sopenharmony_ciTRACE_EVENT(kvm_timer_update_irq, 18262306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_id, __u32 irq, int level), 18362306a36Sopenharmony_ci TP_ARGS(vcpu_id, irq, level), 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci TP_STRUCT__entry( 18662306a36Sopenharmony_ci __field( unsigned long, vcpu_id ) 18762306a36Sopenharmony_ci __field( __u32, irq ) 18862306a36Sopenharmony_ci __field( int, level ) 18962306a36Sopenharmony_ci ), 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci TP_fast_assign( 19262306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 19362306a36Sopenharmony_ci __entry->irq = irq; 19462306a36Sopenharmony_ci __entry->level = level; 19562306a36Sopenharmony_ci ), 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci TP_printk("VCPU: %ld, IRQ %d, level %d", 19862306a36Sopenharmony_ci __entry->vcpu_id, __entry->irq, __entry->level) 19962306a36Sopenharmony_ci); 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ciTRACE_EVENT(kvm_get_timer_map, 20262306a36Sopenharmony_ci TP_PROTO(unsigned long vcpu_id, struct timer_map *map), 20362306a36Sopenharmony_ci TP_ARGS(vcpu_id, map), 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci TP_STRUCT__entry( 20662306a36Sopenharmony_ci __field( unsigned long, vcpu_id ) 20762306a36Sopenharmony_ci __field( int, direct_vtimer ) 20862306a36Sopenharmony_ci __field( int, direct_ptimer ) 20962306a36Sopenharmony_ci __field( int, emul_vtimer ) 21062306a36Sopenharmony_ci __field( int, emul_ptimer ) 21162306a36Sopenharmony_ci ), 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci TP_fast_assign( 21462306a36Sopenharmony_ci __entry->vcpu_id = vcpu_id; 21562306a36Sopenharmony_ci __entry->direct_vtimer = arch_timer_ctx_index(map->direct_vtimer); 21662306a36Sopenharmony_ci __entry->direct_ptimer = 21762306a36Sopenharmony_ci (map->direct_ptimer) ? arch_timer_ctx_index(map->direct_ptimer) : -1; 21862306a36Sopenharmony_ci __entry->emul_vtimer = 21962306a36Sopenharmony_ci (map->emul_vtimer) ? arch_timer_ctx_index(map->emul_vtimer) : -1; 22062306a36Sopenharmony_ci __entry->emul_ptimer = 22162306a36Sopenharmony_ci (map->emul_ptimer) ? arch_timer_ctx_index(map->emul_ptimer) : -1; 22262306a36Sopenharmony_ci ), 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci TP_printk("VCPU: %ld, dv: %d, dp: %d, ev: %d, ep: %d", 22562306a36Sopenharmony_ci __entry->vcpu_id, 22662306a36Sopenharmony_ci __entry->direct_vtimer, 22762306a36Sopenharmony_ci __entry->direct_ptimer, 22862306a36Sopenharmony_ci __entry->emul_vtimer, 22962306a36Sopenharmony_ci __entry->emul_ptimer) 23062306a36Sopenharmony_ci); 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciTRACE_EVENT(kvm_timer_save_state, 23362306a36Sopenharmony_ci TP_PROTO(struct arch_timer_context *ctx), 23462306a36Sopenharmony_ci TP_ARGS(ctx), 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci TP_STRUCT__entry( 23762306a36Sopenharmony_ci __field( unsigned long, ctl ) 23862306a36Sopenharmony_ci __field( unsigned long long, cval ) 23962306a36Sopenharmony_ci __field( int, timer_idx ) 24062306a36Sopenharmony_ci ), 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci TP_fast_assign( 24362306a36Sopenharmony_ci __entry->ctl = timer_get_ctl(ctx); 24462306a36Sopenharmony_ci __entry->cval = timer_get_cval(ctx); 24562306a36Sopenharmony_ci __entry->timer_idx = arch_timer_ctx_index(ctx); 24662306a36Sopenharmony_ci ), 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci TP_printk(" CTL: %#08lx CVAL: %#16llx arch_timer_ctx_index: %d", 24962306a36Sopenharmony_ci __entry->ctl, 25062306a36Sopenharmony_ci __entry->cval, 25162306a36Sopenharmony_ci __entry->timer_idx) 25262306a36Sopenharmony_ci); 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ciTRACE_EVENT(kvm_timer_restore_state, 25562306a36Sopenharmony_ci TP_PROTO(struct arch_timer_context *ctx), 25662306a36Sopenharmony_ci TP_ARGS(ctx), 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci TP_STRUCT__entry( 25962306a36Sopenharmony_ci __field( unsigned long, ctl ) 26062306a36Sopenharmony_ci __field( unsigned long long, cval ) 26162306a36Sopenharmony_ci __field( int, timer_idx ) 26262306a36Sopenharmony_ci ), 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci TP_fast_assign( 26562306a36Sopenharmony_ci __entry->ctl = timer_get_ctl(ctx); 26662306a36Sopenharmony_ci __entry->cval = timer_get_cval(ctx); 26762306a36Sopenharmony_ci __entry->timer_idx = arch_timer_ctx_index(ctx); 26862306a36Sopenharmony_ci ), 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci TP_printk("CTL: %#08lx CVAL: %#16llx arch_timer_ctx_index: %d", 27162306a36Sopenharmony_ci __entry->ctl, 27262306a36Sopenharmony_ci __entry->cval, 27362306a36Sopenharmony_ci __entry->timer_idx) 27462306a36Sopenharmony_ci); 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ciTRACE_EVENT(kvm_timer_hrtimer_expire, 27762306a36Sopenharmony_ci TP_PROTO(struct arch_timer_context *ctx), 27862306a36Sopenharmony_ci TP_ARGS(ctx), 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci TP_STRUCT__entry( 28162306a36Sopenharmony_ci __field( int, timer_idx ) 28262306a36Sopenharmony_ci ), 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci TP_fast_assign( 28562306a36Sopenharmony_ci __entry->timer_idx = arch_timer_ctx_index(ctx); 28662306a36Sopenharmony_ci ), 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ci TP_printk("arch_timer_ctx_index: %d", __entry->timer_idx) 28962306a36Sopenharmony_ci); 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ciTRACE_EVENT(kvm_timer_emulate, 29262306a36Sopenharmony_ci TP_PROTO(struct arch_timer_context *ctx, bool should_fire), 29362306a36Sopenharmony_ci TP_ARGS(ctx, should_fire), 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci TP_STRUCT__entry( 29662306a36Sopenharmony_ci __field( int, timer_idx ) 29762306a36Sopenharmony_ci __field( bool, should_fire ) 29862306a36Sopenharmony_ci ), 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci TP_fast_assign( 30162306a36Sopenharmony_ci __entry->timer_idx = arch_timer_ctx_index(ctx); 30262306a36Sopenharmony_ci __entry->should_fire = should_fire; 30362306a36Sopenharmony_ci ), 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci TP_printk("arch_timer_ctx_index: %d (should_fire: %d)", 30662306a36Sopenharmony_ci __entry->timer_idx, __entry->should_fire) 30762306a36Sopenharmony_ci); 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ciTRACE_EVENT(kvm_nested_eret, 31062306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu, unsigned long elr_el2, 31162306a36Sopenharmony_ci unsigned long spsr_el2), 31262306a36Sopenharmony_ci TP_ARGS(vcpu, elr_el2, spsr_el2), 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci TP_STRUCT__entry( 31562306a36Sopenharmony_ci __field(struct kvm_vcpu *, vcpu) 31662306a36Sopenharmony_ci __field(unsigned long, elr_el2) 31762306a36Sopenharmony_ci __field(unsigned long, spsr_el2) 31862306a36Sopenharmony_ci __field(unsigned long, target_mode) 31962306a36Sopenharmony_ci __field(unsigned long, hcr_el2) 32062306a36Sopenharmony_ci ), 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci TP_fast_assign( 32362306a36Sopenharmony_ci __entry->vcpu = vcpu; 32462306a36Sopenharmony_ci __entry->elr_el2 = elr_el2; 32562306a36Sopenharmony_ci __entry->spsr_el2 = spsr_el2; 32662306a36Sopenharmony_ci __entry->target_mode = spsr_el2 & (PSR_MODE_MASK | PSR_MODE32_BIT); 32762306a36Sopenharmony_ci __entry->hcr_el2 = __vcpu_sys_reg(vcpu, HCR_EL2); 32862306a36Sopenharmony_ci ), 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci TP_printk("elr_el2: 0x%lx spsr_el2: 0x%08lx (M: %s) hcr_el2: %lx", 33162306a36Sopenharmony_ci __entry->elr_el2, __entry->spsr_el2, 33262306a36Sopenharmony_ci __print_symbolic(__entry->target_mode, kvm_mode_names), 33362306a36Sopenharmony_ci __entry->hcr_el2) 33462306a36Sopenharmony_ci); 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ciTRACE_EVENT(kvm_inject_nested_exception, 33762306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu, u64 esr_el2, int type), 33862306a36Sopenharmony_ci TP_ARGS(vcpu, esr_el2, type), 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci TP_STRUCT__entry( 34162306a36Sopenharmony_ci __field(struct kvm_vcpu *, vcpu) 34262306a36Sopenharmony_ci __field(unsigned long, esr_el2) 34362306a36Sopenharmony_ci __field(int, type) 34462306a36Sopenharmony_ci __field(unsigned long, spsr_el2) 34562306a36Sopenharmony_ci __field(unsigned long, pc) 34662306a36Sopenharmony_ci __field(unsigned long, source_mode) 34762306a36Sopenharmony_ci __field(unsigned long, hcr_el2) 34862306a36Sopenharmony_ci ), 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci TP_fast_assign( 35162306a36Sopenharmony_ci __entry->vcpu = vcpu; 35262306a36Sopenharmony_ci __entry->esr_el2 = esr_el2; 35362306a36Sopenharmony_ci __entry->type = type; 35462306a36Sopenharmony_ci __entry->spsr_el2 = *vcpu_cpsr(vcpu); 35562306a36Sopenharmony_ci __entry->pc = *vcpu_pc(vcpu); 35662306a36Sopenharmony_ci __entry->source_mode = *vcpu_cpsr(vcpu) & (PSR_MODE_MASK | PSR_MODE32_BIT); 35762306a36Sopenharmony_ci __entry->hcr_el2 = __vcpu_sys_reg(vcpu, HCR_EL2); 35862306a36Sopenharmony_ci ), 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci TP_printk("%s: esr_el2 0x%lx elr_el2: 0x%lx spsr_el2: 0x%08lx (M: %s) hcr_el2: %lx", 36162306a36Sopenharmony_ci __print_symbolic(__entry->type, kvm_exception_type_names), 36262306a36Sopenharmony_ci __entry->esr_el2, __entry->pc, __entry->spsr_el2, 36362306a36Sopenharmony_ci __print_symbolic(__entry->source_mode, kvm_mode_names), 36462306a36Sopenharmony_ci __entry->hcr_el2) 36562306a36Sopenharmony_ci); 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ciTRACE_EVENT(kvm_forward_sysreg_trap, 36862306a36Sopenharmony_ci TP_PROTO(struct kvm_vcpu *vcpu, u32 sysreg, bool is_read), 36962306a36Sopenharmony_ci TP_ARGS(vcpu, sysreg, is_read), 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_ci TP_STRUCT__entry( 37262306a36Sopenharmony_ci __field(u64, pc) 37362306a36Sopenharmony_ci __field(u32, sysreg) 37462306a36Sopenharmony_ci __field(bool, is_read) 37562306a36Sopenharmony_ci ), 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ci TP_fast_assign( 37862306a36Sopenharmony_ci __entry->pc = *vcpu_pc(vcpu); 37962306a36Sopenharmony_ci __entry->sysreg = sysreg; 38062306a36Sopenharmony_ci __entry->is_read = is_read; 38162306a36Sopenharmony_ci ), 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci TP_printk("%llx %c (%d,%d,%d,%d,%d)", 38462306a36Sopenharmony_ci __entry->pc, 38562306a36Sopenharmony_ci __entry->is_read ? 'R' : 'W', 38662306a36Sopenharmony_ci sys_reg_Op0(__entry->sysreg), 38762306a36Sopenharmony_ci sys_reg_Op1(__entry->sysreg), 38862306a36Sopenharmony_ci sys_reg_CRn(__entry->sysreg), 38962306a36Sopenharmony_ci sys_reg_CRm(__entry->sysreg), 39062306a36Sopenharmony_ci sys_reg_Op2(__entry->sysreg)) 39162306a36Sopenharmony_ci); 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci#endif /* _TRACE_ARM_ARM64_KVM_H */ 39462306a36Sopenharmony_ci 39562306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 39662306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 39762306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 39862306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_arm 39962306a36Sopenharmony_ci 40062306a36Sopenharmony_ci/* This part must be outside protection */ 40162306a36Sopenharmony_ci#include <trace/define_trace.h> 402