diff options
author | Andrey Smetanin <asmetanin@virtuozzo.com> | 2015-12-23 08:53:59 -0500 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-01-08 13:04:43 -0500 |
commit | 18659a9cb1885d00dd428f8857f7f628e54a45ee (patch) | |
tree | 12f77be158df88eb3e57395cac2279ea5a68e056 | |
parent | f3b138c5d89a1f74a2b46adaa1067aea9a7e3cbb (diff) |
kvm/x86: Hyper-V SynIC tracepoints
Trace the following Hyper SynIC events:
* set msr
* set sint irq
* ack sint
* sint irq eoi
Signed-off-by: Andrey Smetanin <asmetanin@virtuozzo.com>
CC: Gleb Natapov <gleb@kernel.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Roman Kagan <rkagan@virtuozzo.com>
CC: Denis V. Lunev <den@openvz.org>
CC: qemu-devel@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | arch/x86/kvm/hyperv.c | 10 | ||||
-rw-r--r-- | arch/x86/kvm/trace.h | 93 |
2 files changed, 98 insertions, 5 deletions
diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 101c2e4a0255..2d83d4598507 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c | |||
@@ -152,7 +152,7 @@ static void kvm_hv_notify_acked_sint(struct kvm_vcpu *vcpu, u32 sint) | |||
152 | struct kvm_vcpu_hv_stimer *stimer; | 152 | struct kvm_vcpu_hv_stimer *stimer; |
153 | int gsi, idx, stimers_pending; | 153 | int gsi, idx, stimers_pending; |
154 | 154 | ||
155 | vcpu_debug(vcpu, "Hyper-V SynIC acked sint %d\n", sint); | 155 | trace_kvm_hv_notify_acked_sint(vcpu->vcpu_id, sint); |
156 | 156 | ||
157 | if (synic->msg_page & HV_SYNIC_SIMP_ENABLE) | 157 | if (synic->msg_page & HV_SYNIC_SIMP_ENABLE) |
158 | synic_clear_sint_msg_pending(synic, sint); | 158 | synic_clear_sint_msg_pending(synic, sint); |
@@ -202,8 +202,8 @@ static int synic_set_msr(struct kvm_vcpu_hv_synic *synic, | |||
202 | if (!synic->active) | 202 | if (!synic->active) |
203 | return 1; | 203 | return 1; |
204 | 204 | ||
205 | vcpu_debug(vcpu, "Hyper-V SynIC set msr 0x%x 0x%llx host %d\n", | 205 | trace_kvm_hv_synic_set_msr(vcpu->vcpu_id, msr, data, host); |
206 | msr, data, host); | 206 | |
207 | ret = 0; | 207 | ret = 0; |
208 | switch (msr) { | 208 | switch (msr) { |
209 | case HV_X64_MSR_SCONTROL: | 209 | case HV_X64_MSR_SCONTROL: |
@@ -312,7 +312,7 @@ int synic_set_irq(struct kvm_vcpu_hv_synic *synic, u32 sint) | |||
312 | irq.level = 1; | 312 | irq.level = 1; |
313 | 313 | ||
314 | ret = kvm_irq_delivery_to_apic(vcpu->kvm, NULL, &irq, NULL); | 314 | ret = kvm_irq_delivery_to_apic(vcpu->kvm, NULL, &irq, NULL); |
315 | vcpu_debug(vcpu, "Hyper-V SynIC set irq ret %d\n", ret); | 315 | trace_kvm_hv_synic_set_irq(vcpu->vcpu_id, sint, irq.vector, ret); |
316 | return ret; | 316 | return ret; |
317 | } | 317 | } |
318 | 318 | ||
@@ -332,7 +332,7 @@ void kvm_hv_synic_send_eoi(struct kvm_vcpu *vcpu, int vector) | |||
332 | struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); | 332 | struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); |
333 | int i; | 333 | int i; |
334 | 334 | ||
335 | vcpu_debug(vcpu, "Hyper-V SynIC send eoi vec %d\n", vector); | 335 | trace_kvm_hv_synic_send_eoi(vcpu->vcpu_id, vector); |
336 | 336 | ||
337 | for (i = 0; i < ARRAY_SIZE(synic->sint); i++) | 337 | for (i = 0; i < ARRAY_SIZE(synic->sint); i++) |
338 | if (synic_get_sint_vector(synic_read_sint(synic, i)) == vector) | 338 | if (synic_get_sint_vector(synic_read_sint(synic, i)) == vector) |
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index ab9ae67a80e4..4be350003bce 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h | |||
@@ -1025,6 +1025,99 @@ TRACE_EVENT(kvm_pi_irte_update, | |||
1025 | __entry->pi_desc_addr) | 1025 | __entry->pi_desc_addr) |
1026 | ); | 1026 | ); |
1027 | 1027 | ||
1028 | /* | ||
1029 | * Tracepoint for kvm_hv_notify_acked_sint. | ||
1030 | */ | ||
1031 | TRACE_EVENT(kvm_hv_notify_acked_sint, | ||
1032 | TP_PROTO(int vcpu_id, u32 sint), | ||
1033 | TP_ARGS(vcpu_id, sint), | ||
1034 | |||
1035 | TP_STRUCT__entry( | ||
1036 | __field(int, vcpu_id) | ||
1037 | __field(u32, sint) | ||
1038 | ), | ||
1039 | |||
1040 | TP_fast_assign( | ||
1041 | __entry->vcpu_id = vcpu_id; | ||
1042 | __entry->sint = sint; | ||
1043 | ), | ||
1044 | |||
1045 | TP_printk("vcpu_id %d sint %u", __entry->vcpu_id, __entry->sint) | ||
1046 | ); | ||
1047 | |||
1048 | /* | ||
1049 | * Tracepoint for synic_set_irq. | ||
1050 | */ | ||
1051 | TRACE_EVENT(kvm_hv_synic_set_irq, | ||
1052 | TP_PROTO(int vcpu_id, u32 sint, int vector, int ret), | ||
1053 | TP_ARGS(vcpu_id, sint, vector, ret), | ||
1054 | |||
1055 | TP_STRUCT__entry( | ||
1056 | __field(int, vcpu_id) | ||
1057 | __field(u32, sint) | ||
1058 | __field(int, vector) | ||
1059 | __field(int, ret) | ||
1060 | ), | ||
1061 | |||
1062 | TP_fast_assign( | ||
1063 | __entry->vcpu_id = vcpu_id; | ||
1064 | __entry->sint = sint; | ||
1065 | __entry->vector = vector; | ||
1066 | __entry->ret = ret; | ||
1067 | ), | ||
1068 | |||
1069 | TP_printk("vcpu_id %d sint %u vector %d ret %d", | ||
1070 | __entry->vcpu_id, __entry->sint, __entry->vector, | ||
1071 | __entry->ret) | ||
1072 | ); | ||
1073 | |||
1074 | /* | ||
1075 | * Tracepoint for kvm_hv_synic_send_eoi. | ||
1076 | */ | ||
1077 | TRACE_EVENT(kvm_hv_synic_send_eoi, | ||
1078 | TP_PROTO(int vcpu_id, int vector), | ||
1079 | TP_ARGS(vcpu_id, vector), | ||
1080 | |||
1081 | TP_STRUCT__entry( | ||
1082 | __field(int, vcpu_id) | ||
1083 | __field(u32, sint) | ||
1084 | __field(int, vector) | ||
1085 | __field(int, ret) | ||
1086 | ), | ||
1087 | |||
1088 | TP_fast_assign( | ||
1089 | __entry->vcpu_id = vcpu_id; | ||
1090 | __entry->vector = vector; | ||
1091 | ), | ||
1092 | |||
1093 | TP_printk("vcpu_id %d vector %d", __entry->vcpu_id, __entry->vector) | ||
1094 | ); | ||
1095 | |||
1096 | /* | ||
1097 | * Tracepoint for synic_set_msr. | ||
1098 | */ | ||
1099 | TRACE_EVENT(kvm_hv_synic_set_msr, | ||
1100 | TP_PROTO(int vcpu_id, u32 msr, u64 data, bool host), | ||
1101 | TP_ARGS(vcpu_id, msr, data, host), | ||
1102 | |||
1103 | TP_STRUCT__entry( | ||
1104 | __field(int, vcpu_id) | ||
1105 | __field(u32, msr) | ||
1106 | __field(u64, data) | ||
1107 | __field(bool, host) | ||
1108 | ), | ||
1109 | |||
1110 | TP_fast_assign( | ||
1111 | __entry->vcpu_id = vcpu_id; | ||
1112 | __entry->msr = msr; | ||
1113 | __entry->data = data; | ||
1114 | __entry->host = host | ||
1115 | ), | ||
1116 | |||
1117 | TP_printk("vcpu_id %d msr 0x%x data 0x%llx host %d", | ||
1118 | __entry->vcpu_id, __entry->msr, __entry->data, __entry->host) | ||
1119 | ); | ||
1120 | |||
1028 | #endif /* _TRACE_KVM_H */ | 1121 | #endif /* _TRACE_KVM_H */ |
1029 | 1122 | ||
1030 | #undef TRACE_INCLUDE_PATH | 1123 | #undef TRACE_INCLUDE_PATH |