aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Smetanin <asmetanin@virtuozzo.com>2015-12-23 08:53:59 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2016-01-08 13:04:43 -0500
commit18659a9cb1885d00dd428f8857f7f628e54a45ee (patch)
tree12f77be158df88eb3e57395cac2279ea5a68e056
parentf3b138c5d89a1f74a2b46adaa1067aea9a7e3cbb (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.c10
-rw-r--r--arch/x86/kvm/trace.h93
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 */
1031TRACE_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 */
1051TRACE_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 */
1077TRACE_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 */
1099TRACE_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