xref: /linux/arch/arm64/include/asm/kvm_hypevents.h (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
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