10a90fbc8SVincent Donnefort /* SPDX-License-Identifier: GPL-2.0 */ 20a90fbc8SVincent Donnefort 30a90fbc8SVincent Donnefort #if !defined(__ARM64_KVM_HYPEVENTS_H_) || defined(HYP_EVENT_MULTI_READ) 40a90fbc8SVincent Donnefort #define __ARM64_KVM_HYPEVENTS_H_ 50a90fbc8SVincent Donnefort 60a90fbc8SVincent Donnefort #ifdef __KVM_NVHE_HYPERVISOR__ 70a90fbc8SVincent Donnefort #include <nvhe/trace.h> 80a90fbc8SVincent Donnefort #endif 90a90fbc8SVincent Donnefort 10696dfec2SVincent Donnefort #ifndef __HYP_ENTER_EXIT_REASON 11696dfec2SVincent Donnefort #define __HYP_ENTER_EXIT_REASON 12696dfec2SVincent Donnefort enum hyp_enter_exit_reason { 13696dfec2SVincent Donnefort HYP_REASON_SMC, 14696dfec2SVincent Donnefort HYP_REASON_HVC, 15696dfec2SVincent Donnefort HYP_REASON_PSCI, 16696dfec2SVincent Donnefort HYP_REASON_HOST_ABORT, 17696dfec2SVincent Donnefort HYP_REASON_GUEST_EXIT, 18696dfec2SVincent Donnefort HYP_REASON_ERET_HOST, 19696dfec2SVincent Donnefort HYP_REASON_ERET_GUEST, 20696dfec2SVincent Donnefort HYP_REASON_UNKNOWN /* Must be last */ 21696dfec2SVincent Donnefort }; 22696dfec2SVincent Donnefort #endif 23696dfec2SVincent Donnefort 24696dfec2SVincent Donnefort HYP_EVENT(hyp_enter, 25696dfec2SVincent Donnefort HE_PROTO(struct kvm_cpu_context *host_ctxt, u8 reason), 26696dfec2SVincent Donnefort HE_STRUCT( 27696dfec2SVincent Donnefort he_field(u8, reason) 28696dfec2SVincent Donnefort he_field(pid_t, vcpu) 29696dfec2SVincent Donnefort ), 30696dfec2SVincent Donnefort HE_ASSIGN( 31696dfec2SVincent Donnefort __entry->reason = reason; 32696dfec2SVincent Donnefort __entry->vcpu = __tracing_get_vcpu_pid(host_ctxt); 33696dfec2SVincent Donnefort ), 34696dfec2SVincent Donnefort HE_PRINTK("reason=%s vcpu=%d", __hyp_enter_exit_reason_str(__entry->reason), __entry->vcpu) 35696dfec2SVincent Donnefort ); 36696dfec2SVincent Donnefort 37696dfec2SVincent Donnefort HYP_EVENT(hyp_exit, 38696dfec2SVincent Donnefort HE_PROTO(struct kvm_cpu_context *host_ctxt, u8 reason), 39696dfec2SVincent Donnefort HE_STRUCT( 40696dfec2SVincent Donnefort he_field(u8, reason) 41696dfec2SVincent Donnefort he_field(pid_t, vcpu) 42696dfec2SVincent Donnefort ), 43696dfec2SVincent Donnefort HE_ASSIGN( 44696dfec2SVincent Donnefort __entry->reason = reason; 45696dfec2SVincent Donnefort __entry->vcpu = __tracing_get_vcpu_pid(host_ctxt); 46696dfec2SVincent Donnefort ), 47696dfec2SVincent Donnefort HE_PRINTK("reason=%s vcpu=%d", __hyp_enter_exit_reason_str(__entry->reason), __entry->vcpu) 48696dfec2SVincent Donnefort ); 49*5bbbed42SVincent Donnefort 50*5bbbed42SVincent Donnefort HYP_EVENT(selftest, 51*5bbbed42SVincent Donnefort HE_PROTO(u64 id), 52*5bbbed42SVincent Donnefort HE_STRUCT( 53*5bbbed42SVincent Donnefort he_field(u64, id) 54*5bbbed42SVincent Donnefort ), 55*5bbbed42SVincent Donnefort HE_ASSIGN( 56*5bbbed42SVincent Donnefort __entry->id = id; 57*5bbbed42SVincent Donnefort ), 58*5bbbed42SVincent Donnefort RE_PRINTK("id=%llu", __entry->id) 59*5bbbed42SVincent Donnefort ); 600a90fbc8SVincent Donnefort #endif 61