.. | .. |
---|
15 | 15 | * Tracepoint for guest mode entry. |
---|
16 | 16 | */ |
---|
17 | 17 | TRACE_EVENT(kvm_entry, |
---|
18 | | - TP_PROTO(unsigned int vcpu_id), |
---|
19 | | - TP_ARGS(vcpu_id), |
---|
| 18 | + TP_PROTO(struct kvm_vcpu *vcpu), |
---|
| 19 | + TP_ARGS(vcpu), |
---|
20 | 20 | |
---|
21 | 21 | TP_STRUCT__entry( |
---|
22 | 22 | __field( unsigned int, vcpu_id ) |
---|
| 23 | + __field( unsigned long, rip ) |
---|
23 | 24 | ), |
---|
24 | 25 | |
---|
25 | 26 | TP_fast_assign( |
---|
26 | | - __entry->vcpu_id = vcpu_id; |
---|
| 27 | + __entry->vcpu_id = vcpu->vcpu_id; |
---|
| 28 | + __entry->rip = kvm_rip_read(vcpu); |
---|
27 | 29 | ), |
---|
28 | 30 | |
---|
29 | | - TP_printk("vcpu %u", __entry->vcpu_id) |
---|
| 31 | + TP_printk("vcpu %u, rip 0x%lx", __entry->vcpu_id, __entry->rip) |
---|
30 | 32 | ); |
---|
31 | 33 | |
---|
32 | 34 | /* |
---|
.. | .. |
---|
151 | 153 | * Tracepoint for cpuid. |
---|
152 | 154 | */ |
---|
153 | 155 | TRACE_EVENT(kvm_cpuid, |
---|
154 | | - TP_PROTO(unsigned int function, unsigned long rax, unsigned long rbx, |
---|
155 | | - unsigned long rcx, unsigned long rdx, bool found), |
---|
156 | | - TP_ARGS(function, rax, rbx, rcx, rdx, found), |
---|
| 156 | + TP_PROTO(unsigned int function, unsigned int index, unsigned long rax, |
---|
| 157 | + unsigned long rbx, unsigned long rcx, unsigned long rdx, |
---|
| 158 | + bool found, bool used_max_basic), |
---|
| 159 | + TP_ARGS(function, index, rax, rbx, rcx, rdx, found, used_max_basic), |
---|
157 | 160 | |
---|
158 | 161 | TP_STRUCT__entry( |
---|
159 | 162 | __field( unsigned int, function ) |
---|
| 163 | + __field( unsigned int, index ) |
---|
160 | 164 | __field( unsigned long, rax ) |
---|
161 | 165 | __field( unsigned long, rbx ) |
---|
162 | 166 | __field( unsigned long, rcx ) |
---|
163 | 167 | __field( unsigned long, rdx ) |
---|
164 | 168 | __field( bool, found ) |
---|
| 169 | + __field( bool, used_max_basic ) |
---|
165 | 170 | ), |
---|
166 | 171 | |
---|
167 | 172 | TP_fast_assign( |
---|
168 | 173 | __entry->function = function; |
---|
| 174 | + __entry->index = index; |
---|
169 | 175 | __entry->rax = rax; |
---|
170 | 176 | __entry->rbx = rbx; |
---|
171 | 177 | __entry->rcx = rcx; |
---|
172 | 178 | __entry->rdx = rdx; |
---|
173 | 179 | __entry->found = found; |
---|
| 180 | + __entry->used_max_basic = used_max_basic; |
---|
174 | 181 | ), |
---|
175 | 182 | |
---|
176 | | - TP_printk("func %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s", |
---|
177 | | - __entry->function, __entry->rax, |
---|
| 183 | + TP_printk("func %x idx %x rax %lx rbx %lx rcx %lx rdx %lx, cpuid entry %s%s", |
---|
| 184 | + __entry->function, __entry->index, __entry->rax, |
---|
178 | 185 | __entry->rbx, __entry->rcx, __entry->rdx, |
---|
179 | | - __entry->found ? "found" : "not found") |
---|
| 186 | + __entry->found ? "found" : "not found", |
---|
| 187 | + __entry->used_max_basic ? ", used max basic" : "") |
---|
180 | 188 | ); |
---|
181 | 189 | |
---|
182 | 190 | #define AREG(x) { APIC_##x, "APIC_" #x } |
---|
.. | .. |
---|
219 | 227 | #define KVM_ISA_VMX 1 |
---|
220 | 228 | #define KVM_ISA_SVM 2 |
---|
221 | 229 | |
---|
| 230 | +#define kvm_print_exit_reason(exit_reason, isa) \ |
---|
| 231 | + (isa == KVM_ISA_VMX) ? \ |
---|
| 232 | + __print_symbolic(exit_reason & 0xffff, VMX_EXIT_REASONS) : \ |
---|
| 233 | + __print_symbolic(exit_reason, SVM_EXIT_REASONS), \ |
---|
| 234 | + (isa == KVM_ISA_VMX && exit_reason & ~0xffff) ? " " : "", \ |
---|
| 235 | + (isa == KVM_ISA_VMX) ? \ |
---|
| 236 | + __print_flags(exit_reason & ~0xffff, " ", VMX_EXIT_REASON_FLAGS) : "" |
---|
| 237 | + |
---|
| 238 | +#define TRACE_EVENT_KVM_EXIT(name) \ |
---|
| 239 | +TRACE_EVENT(name, \ |
---|
| 240 | + TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa), \ |
---|
| 241 | + TP_ARGS(exit_reason, vcpu, isa), \ |
---|
| 242 | + \ |
---|
| 243 | + TP_STRUCT__entry( \ |
---|
| 244 | + __field( unsigned int, exit_reason ) \ |
---|
| 245 | + __field( unsigned long, guest_rip ) \ |
---|
| 246 | + __field( u32, isa ) \ |
---|
| 247 | + __field( u64, info1 ) \ |
---|
| 248 | + __field( u64, info2 ) \ |
---|
| 249 | + __field( u32, intr_info ) \ |
---|
| 250 | + __field( u32, error_code ) \ |
---|
| 251 | + __field( unsigned int, vcpu_id ) \ |
---|
| 252 | + ), \ |
---|
| 253 | + \ |
---|
| 254 | + TP_fast_assign( \ |
---|
| 255 | + __entry->exit_reason = exit_reason; \ |
---|
| 256 | + __entry->guest_rip = kvm_rip_read(vcpu); \ |
---|
| 257 | + __entry->isa = isa; \ |
---|
| 258 | + __entry->vcpu_id = vcpu->vcpu_id; \ |
---|
| 259 | + kvm_x86_ops.get_exit_info(vcpu, &__entry->info1, \ |
---|
| 260 | + &__entry->info2, \ |
---|
| 261 | + &__entry->intr_info, \ |
---|
| 262 | + &__entry->error_code); \ |
---|
| 263 | + ), \ |
---|
| 264 | + \ |
---|
| 265 | + TP_printk("vcpu %u reason %s%s%s rip 0x%lx info1 0x%016llx " \ |
---|
| 266 | + "info2 0x%016llx intr_info 0x%08x error_code 0x%08x", \ |
---|
| 267 | + __entry->vcpu_id, \ |
---|
| 268 | + kvm_print_exit_reason(__entry->exit_reason, __entry->isa), \ |
---|
| 269 | + __entry->guest_rip, __entry->info1, __entry->info2, \ |
---|
| 270 | + __entry->intr_info, __entry->error_code) \ |
---|
| 271 | +) |
---|
| 272 | + |
---|
222 | 273 | /* |
---|
223 | 274 | * Tracepoint for kvm guest exit: |
---|
224 | 275 | */ |
---|
225 | | -TRACE_EVENT(kvm_exit, |
---|
226 | | - TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu, u32 isa), |
---|
227 | | - TP_ARGS(exit_reason, vcpu, isa), |
---|
228 | | - |
---|
229 | | - TP_STRUCT__entry( |
---|
230 | | - __field( unsigned int, exit_reason ) |
---|
231 | | - __field( unsigned long, guest_rip ) |
---|
232 | | - __field( u32, isa ) |
---|
233 | | - __field( u64, info1 ) |
---|
234 | | - __field( u64, info2 ) |
---|
235 | | - ), |
---|
236 | | - |
---|
237 | | - TP_fast_assign( |
---|
238 | | - __entry->exit_reason = exit_reason; |
---|
239 | | - __entry->guest_rip = kvm_rip_read(vcpu); |
---|
240 | | - __entry->isa = isa; |
---|
241 | | - kvm_x86_ops->get_exit_info(vcpu, &__entry->info1, |
---|
242 | | - &__entry->info2); |
---|
243 | | - ), |
---|
244 | | - |
---|
245 | | - TP_printk("reason %s rip 0x%lx info %llx %llx", |
---|
246 | | - (__entry->isa == KVM_ISA_VMX) ? |
---|
247 | | - __print_symbolic(__entry->exit_reason, VMX_EXIT_REASONS) : |
---|
248 | | - __print_symbolic(__entry->exit_reason, SVM_EXIT_REASONS), |
---|
249 | | - __entry->guest_rip, __entry->info1, __entry->info2) |
---|
250 | | -); |
---|
| 276 | +TRACE_EVENT_KVM_EXIT(kvm_exit); |
---|
251 | 277 | |
---|
252 | 278 | /* |
---|
253 | 279 | * Tracepoint for kvm interrupt injection: |
---|
.. | .. |
---|
278 | 304 | * Tracepoint for kvm interrupt injection: |
---|
279 | 305 | */ |
---|
280 | 306 | TRACE_EVENT(kvm_inj_exception, |
---|
281 | | - TP_PROTO(unsigned exception, bool has_error, unsigned error_code), |
---|
282 | | - TP_ARGS(exception, has_error, error_code), |
---|
| 307 | + TP_PROTO(unsigned exception, bool has_error, unsigned error_code, |
---|
| 308 | + bool reinjected), |
---|
| 309 | + TP_ARGS(exception, has_error, error_code, reinjected), |
---|
283 | 310 | |
---|
284 | 311 | TP_STRUCT__entry( |
---|
285 | 312 | __field( u8, exception ) |
---|
286 | 313 | __field( u8, has_error ) |
---|
287 | 314 | __field( u32, error_code ) |
---|
| 315 | + __field( bool, reinjected ) |
---|
288 | 316 | ), |
---|
289 | 317 | |
---|
290 | 318 | TP_fast_assign( |
---|
291 | 319 | __entry->exception = exception; |
---|
292 | 320 | __entry->has_error = has_error; |
---|
293 | 321 | __entry->error_code = error_code; |
---|
| 322 | + __entry->reinjected = reinjected; |
---|
294 | 323 | ), |
---|
295 | 324 | |
---|
296 | | - TP_printk("%s (0x%x)", |
---|
| 325 | + TP_printk("%s (0x%x)%s", |
---|
297 | 326 | __print_symbolic(__entry->exception, kvm_trace_sym_exc), |
---|
298 | 327 | /* FIXME: don't print error_code if not present */ |
---|
299 | | - __entry->has_error ? __entry->error_code : 0) |
---|
| 328 | + __entry->has_error ? __entry->error_code : 0, |
---|
| 329 | + __entry->reinjected ? " [reinjected]" : "") |
---|
300 | 330 | ); |
---|
301 | 331 | |
---|
302 | 332 | /* |
---|
.. | .. |
---|
529 | 559 | ); |
---|
530 | 560 | |
---|
531 | 561 | TRACE_EVENT(kvm_nested_intercepts, |
---|
532 | | - TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, __u64 intercept), |
---|
533 | | - TP_ARGS(cr_read, cr_write, exceptions, intercept), |
---|
| 562 | + TP_PROTO(__u16 cr_read, __u16 cr_write, __u32 exceptions, |
---|
| 563 | + __u32 intercept1, __u32 intercept2, __u32 intercept3), |
---|
| 564 | + TP_ARGS(cr_read, cr_write, exceptions, intercept1, |
---|
| 565 | + intercept2, intercept3), |
---|
534 | 566 | |
---|
535 | 567 | TP_STRUCT__entry( |
---|
536 | 568 | __field( __u16, cr_read ) |
---|
537 | 569 | __field( __u16, cr_write ) |
---|
538 | 570 | __field( __u32, exceptions ) |
---|
539 | | - __field( __u64, intercept ) |
---|
| 571 | + __field( __u32, intercept1 ) |
---|
| 572 | + __field( __u32, intercept2 ) |
---|
| 573 | + __field( __u32, intercept3 ) |
---|
540 | 574 | ), |
---|
541 | 575 | |
---|
542 | 576 | TP_fast_assign( |
---|
543 | 577 | __entry->cr_read = cr_read; |
---|
544 | 578 | __entry->cr_write = cr_write; |
---|
545 | 579 | __entry->exceptions = exceptions; |
---|
546 | | - __entry->intercept = intercept; |
---|
| 580 | + __entry->intercept1 = intercept1; |
---|
| 581 | + __entry->intercept2 = intercept2; |
---|
| 582 | + __entry->intercept3 = intercept3; |
---|
547 | 583 | ), |
---|
548 | 584 | |
---|
549 | | - TP_printk("cr_read: %04x cr_write: %04x excp: %08x intercept: %016llx", |
---|
550 | | - __entry->cr_read, __entry->cr_write, __entry->exceptions, |
---|
551 | | - __entry->intercept) |
---|
| 585 | + TP_printk("cr_read: %04x cr_write: %04x excp: %08x " |
---|
| 586 | + "intercepts: %08x %08x %08x", |
---|
| 587 | + __entry->cr_read, __entry->cr_write, __entry->exceptions, |
---|
| 588 | + __entry->intercept1, __entry->intercept2, __entry->intercept3) |
---|
552 | 589 | ); |
---|
553 | 590 | /* |
---|
554 | 591 | * Tracepoint for #VMEXIT while nested |
---|
555 | 592 | */ |
---|
556 | | -TRACE_EVENT(kvm_nested_vmexit, |
---|
557 | | - TP_PROTO(__u64 rip, __u32 exit_code, |
---|
558 | | - __u64 exit_info1, __u64 exit_info2, |
---|
559 | | - __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa), |
---|
560 | | - TP_ARGS(rip, exit_code, exit_info1, exit_info2, |
---|
561 | | - exit_int_info, exit_int_info_err, isa), |
---|
562 | | - |
---|
563 | | - TP_STRUCT__entry( |
---|
564 | | - __field( __u64, rip ) |
---|
565 | | - __field( __u32, exit_code ) |
---|
566 | | - __field( __u64, exit_info1 ) |
---|
567 | | - __field( __u64, exit_info2 ) |
---|
568 | | - __field( __u32, exit_int_info ) |
---|
569 | | - __field( __u32, exit_int_info_err ) |
---|
570 | | - __field( __u32, isa ) |
---|
571 | | - ), |
---|
572 | | - |
---|
573 | | - TP_fast_assign( |
---|
574 | | - __entry->rip = rip; |
---|
575 | | - __entry->exit_code = exit_code; |
---|
576 | | - __entry->exit_info1 = exit_info1; |
---|
577 | | - __entry->exit_info2 = exit_info2; |
---|
578 | | - __entry->exit_int_info = exit_int_info; |
---|
579 | | - __entry->exit_int_info_err = exit_int_info_err; |
---|
580 | | - __entry->isa = isa; |
---|
581 | | - ), |
---|
582 | | - TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx " |
---|
583 | | - "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", |
---|
584 | | - __entry->rip, |
---|
585 | | - (__entry->isa == KVM_ISA_VMX) ? |
---|
586 | | - __print_symbolic(__entry->exit_code, VMX_EXIT_REASONS) : |
---|
587 | | - __print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), |
---|
588 | | - __entry->exit_info1, __entry->exit_info2, |
---|
589 | | - __entry->exit_int_info, __entry->exit_int_info_err) |
---|
590 | | -); |
---|
| 593 | +TRACE_EVENT_KVM_EXIT(kvm_nested_vmexit); |
---|
591 | 594 | |
---|
592 | 595 | /* |
---|
593 | 596 | * Tracepoint for #VMEXIT reinjected to the guest |
---|
.. | .. |
---|
617 | 620 | __entry->isa = isa; |
---|
618 | 621 | ), |
---|
619 | 622 | |
---|
620 | | - TP_printk("reason: %s ext_inf1: 0x%016llx " |
---|
| 623 | + TP_printk("reason: %s%s%s ext_inf1: 0x%016llx " |
---|
621 | 624 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", |
---|
622 | | - (__entry->isa == KVM_ISA_VMX) ? |
---|
623 | | - __print_symbolic(__entry->exit_code, VMX_EXIT_REASONS) : |
---|
624 | | - __print_symbolic(__entry->exit_code, SVM_EXIT_REASONS), |
---|
625 | | - __entry->exit_info1, __entry->exit_info2, |
---|
626 | | - __entry->exit_int_info, __entry->exit_int_info_err) |
---|
| 625 | + kvm_print_exit_reason(__entry->exit_code, __entry->isa), |
---|
| 626 | + __entry->exit_info1, __entry->exit_info2, |
---|
| 627 | + __entry->exit_int_info, __entry->exit_int_info_err) |
---|
627 | 628 | ); |
---|
628 | 629 | |
---|
629 | 630 | /* |
---|
.. | .. |
---|
741 | 742 | ), |
---|
742 | 743 | |
---|
743 | 744 | TP_fast_assign( |
---|
744 | | - __entry->csbase = kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS); |
---|
745 | | - __entry->len = vcpu->arch.emulate_ctxt.fetch.ptr |
---|
746 | | - - vcpu->arch.emulate_ctxt.fetch.data; |
---|
747 | | - __entry->rip = vcpu->arch.emulate_ctxt._eip - __entry->len; |
---|
| 745 | + __entry->csbase = kvm_x86_ops.get_segment_base(vcpu, VCPU_SREG_CS); |
---|
| 746 | + __entry->len = vcpu->arch.emulate_ctxt->fetch.ptr |
---|
| 747 | + - vcpu->arch.emulate_ctxt->fetch.data; |
---|
| 748 | + __entry->rip = vcpu->arch.emulate_ctxt->_eip - __entry->len; |
---|
748 | 749 | memcpy(__entry->insn, |
---|
749 | | - vcpu->arch.emulate_ctxt.fetch.data, |
---|
| 750 | + vcpu->arch.emulate_ctxt->fetch.data, |
---|
750 | 751 | 15); |
---|
751 | | - __entry->flags = kei_decode_mode(vcpu->arch.emulate_ctxt.mode); |
---|
| 752 | + __entry->flags = kei_decode_mode(vcpu->arch.emulate_ctxt->mode); |
---|
752 | 753 | __entry->failed = failed; |
---|
753 | 754 | ), |
---|
754 | 755 | |
---|
.. | .. |
---|
812 | 813 | #ifdef CONFIG_X86_64 |
---|
813 | 814 | |
---|
814 | 815 | #define host_clocks \ |
---|
815 | | - {VCLOCK_NONE, "none"}, \ |
---|
816 | | - {VCLOCK_TSC, "tsc"} \ |
---|
| 816 | + {VDSO_CLOCKMODE_NONE, "none"}, \ |
---|
| 817 | + {VDSO_CLOCKMODE_TSC, "tsc"} \ |
---|
817 | 818 | |
---|
818 | 819 | TRACE_EVENT(kvm_update_master_clock, |
---|
819 | 820 | TP_PROTO(bool use_master_clock, unsigned int host_clock, bool offset_matched), |
---|
.. | .. |
---|
887 | 888 | TP_printk("vcpu %d: PML full", __entry->vcpu_id) |
---|
888 | 889 | ); |
---|
889 | 890 | |
---|
890 | | -TRACE_EVENT(kvm_ple_window, |
---|
891 | | - TP_PROTO(bool grow, unsigned int vcpu_id, int new, int old), |
---|
892 | | - TP_ARGS(grow, vcpu_id, new, old), |
---|
| 891 | +TRACE_EVENT(kvm_ple_window_update, |
---|
| 892 | + TP_PROTO(unsigned int vcpu_id, unsigned int new, unsigned int old), |
---|
| 893 | + TP_ARGS(vcpu_id, new, old), |
---|
893 | 894 | |
---|
894 | 895 | TP_STRUCT__entry( |
---|
895 | | - __field( bool, grow ) |
---|
896 | 896 | __field( unsigned int, vcpu_id ) |
---|
897 | | - __field( int, new ) |
---|
898 | | - __field( int, old ) |
---|
| 897 | + __field( unsigned int, new ) |
---|
| 898 | + __field( unsigned int, old ) |
---|
899 | 899 | ), |
---|
900 | 900 | |
---|
901 | 901 | TP_fast_assign( |
---|
902 | | - __entry->grow = grow; |
---|
903 | 902 | __entry->vcpu_id = vcpu_id; |
---|
904 | 903 | __entry->new = new; |
---|
905 | 904 | __entry->old = old; |
---|
906 | 905 | ), |
---|
907 | 906 | |
---|
908 | | - TP_printk("vcpu %u: ple_window %d (%s %d)", |
---|
909 | | - __entry->vcpu_id, |
---|
910 | | - __entry->new, |
---|
911 | | - __entry->grow ? "grow" : "shrink", |
---|
912 | | - __entry->old) |
---|
| 907 | + TP_printk("vcpu %u old %u new %u (%s)", |
---|
| 908 | + __entry->vcpu_id, __entry->old, __entry->new, |
---|
| 909 | + __entry->old < __entry->new ? "growed" : "shrinked") |
---|
913 | 910 | ); |
---|
914 | | - |
---|
915 | | -#define trace_kvm_ple_window_grow(vcpu_id, new, old) \ |
---|
916 | | - trace_kvm_ple_window(true, vcpu_id, new, old) |
---|
917 | | -#define trace_kvm_ple_window_shrink(vcpu_id, new, old) \ |
---|
918 | | - trace_kvm_ple_window(false, vcpu_id, new, old) |
---|
919 | 911 | |
---|
920 | 912 | TRACE_EVENT(kvm_pvclock_update, |
---|
921 | 913 | TP_PROTO(unsigned int vcpu_id, struct pvclock_vcpu_time_info *pvclock), |
---|
.. | .. |
---|
1254 | 1246 | * Tracepoint for stimer_expiration. |
---|
1255 | 1247 | */ |
---|
1256 | 1248 | TRACE_EVENT(kvm_hv_stimer_expiration, |
---|
1257 | | - TP_PROTO(int vcpu_id, int timer_index, int msg_send_result), |
---|
1258 | | - TP_ARGS(vcpu_id, timer_index, msg_send_result), |
---|
| 1249 | + TP_PROTO(int vcpu_id, int timer_index, int direct, int msg_send_result), |
---|
| 1250 | + TP_ARGS(vcpu_id, timer_index, direct, msg_send_result), |
---|
1259 | 1251 | |
---|
1260 | 1252 | TP_STRUCT__entry( |
---|
1261 | 1253 | __field(int, vcpu_id) |
---|
1262 | 1254 | __field(int, timer_index) |
---|
| 1255 | + __field(int, direct) |
---|
1263 | 1256 | __field(int, msg_send_result) |
---|
1264 | 1257 | ), |
---|
1265 | 1258 | |
---|
1266 | 1259 | TP_fast_assign( |
---|
1267 | 1260 | __entry->vcpu_id = vcpu_id; |
---|
1268 | 1261 | __entry->timer_index = timer_index; |
---|
| 1262 | + __entry->direct = direct; |
---|
1269 | 1263 | __entry->msg_send_result = msg_send_result; |
---|
1270 | 1264 | ), |
---|
1271 | 1265 | |
---|
1272 | | - TP_printk("vcpu_id %d timer %d msg send result %d", |
---|
| 1266 | + TP_printk("vcpu_id %d timer %d direct %d send result %d", |
---|
1273 | 1267 | __entry->vcpu_id, __entry->timer_index, |
---|
1274 | | - __entry->msg_send_result) |
---|
| 1268 | + __entry->direct, __entry->msg_send_result) |
---|
1275 | 1269 | ); |
---|
1276 | 1270 | |
---|
1277 | 1271 | /* |
---|
.. | .. |
---|
1293 | 1287 | |
---|
1294 | 1288 | TP_printk("vcpu_id %d timer %d", |
---|
1295 | 1289 | __entry->vcpu_id, __entry->timer_index) |
---|
| 1290 | +); |
---|
| 1291 | + |
---|
| 1292 | +TRACE_EVENT(kvm_apicv_update_request, |
---|
| 1293 | + TP_PROTO(bool activate, unsigned long bit), |
---|
| 1294 | + TP_ARGS(activate, bit), |
---|
| 1295 | + |
---|
| 1296 | + TP_STRUCT__entry( |
---|
| 1297 | + __field(bool, activate) |
---|
| 1298 | + __field(unsigned long, bit) |
---|
| 1299 | + ), |
---|
| 1300 | + |
---|
| 1301 | + TP_fast_assign( |
---|
| 1302 | + __entry->activate = activate; |
---|
| 1303 | + __entry->bit = bit; |
---|
| 1304 | + ), |
---|
| 1305 | + |
---|
| 1306 | + TP_printk("%s bit=%lu", |
---|
| 1307 | + __entry->activate ? "activate" : "deactivate", |
---|
| 1308 | + __entry->bit) |
---|
1296 | 1309 | ); |
---|
1297 | 1310 | |
---|
1298 | 1311 | /* |
---|
.. | .. |
---|
1318 | 1331 | __entry->index = index; |
---|
1319 | 1332 | ), |
---|
1320 | 1333 | |
---|
1321 | | - TP_printk("vcpu=%u, icrh:icrl=%#010x:%08x, id=%u, index=%u\n", |
---|
| 1334 | + TP_printk("vcpu=%u, icrh:icrl=%#010x:%08x, id=%u, index=%u", |
---|
1322 | 1335 | __entry->vcpu, __entry->icrh, __entry->icrl, |
---|
1323 | 1336 | __entry->id, __entry->index) |
---|
1324 | 1337 | ); |
---|
.. | .. |
---|
1343 | 1356 | __entry->vec = vec; |
---|
1344 | 1357 | ), |
---|
1345 | 1358 | |
---|
1346 | | - TP_printk("vcpu=%u, offset=%#x(%s), %s, %s, vec=%#x\n", |
---|
| 1359 | + TP_printk("vcpu=%u, offset=%#x(%s), %s, %s, vec=%#x", |
---|
1347 | 1360 | __entry->vcpu, |
---|
1348 | 1361 | __entry->offset, |
---|
1349 | 1362 | __print_symbolic(__entry->offset, kvm_trace_symbol_apic), |
---|
1350 | 1363 | __entry->ft ? "trap" : "fault", |
---|
1351 | 1364 | __entry->rw ? "write" : "read", |
---|
1352 | 1365 | __entry->vec) |
---|
| 1366 | +); |
---|
| 1367 | + |
---|
| 1368 | +TRACE_EVENT(kvm_avic_ga_log, |
---|
| 1369 | + TP_PROTO(u32 vmid, u32 vcpuid), |
---|
| 1370 | + TP_ARGS(vmid, vcpuid), |
---|
| 1371 | + |
---|
| 1372 | + TP_STRUCT__entry( |
---|
| 1373 | + __field(u32, vmid) |
---|
| 1374 | + __field(u32, vcpuid) |
---|
| 1375 | + ), |
---|
| 1376 | + |
---|
| 1377 | + TP_fast_assign( |
---|
| 1378 | + __entry->vmid = vmid; |
---|
| 1379 | + __entry->vcpuid = vcpuid; |
---|
| 1380 | + ), |
---|
| 1381 | + |
---|
| 1382 | + TP_printk("vmid=%u, vcpuid=%u", |
---|
| 1383 | + __entry->vmid, __entry->vcpuid) |
---|
1353 | 1384 | ); |
---|
1354 | 1385 | |
---|
1355 | 1386 | TRACE_EVENT(kvm_hv_timer_state, |
---|
.. | .. |
---|
1363 | 1394 | __entry->vcpu_id = vcpu_id; |
---|
1364 | 1395 | __entry->hv_timer_in_use = hv_timer_in_use; |
---|
1365 | 1396 | ), |
---|
1366 | | - TP_printk("vcpu_id %x hv_timer %x\n", |
---|
| 1397 | + TP_printk("vcpu_id %x hv_timer %x", |
---|
1367 | 1398 | __entry->vcpu_id, |
---|
1368 | 1399 | __entry->hv_timer_in_use) |
---|
1369 | 1400 | ); |
---|
.. | .. |
---|
1418 | 1449 | __entry->valid_bank_mask, __entry->format, |
---|
1419 | 1450 | __entry->address_space, __entry->flags) |
---|
1420 | 1451 | ); |
---|
| 1452 | + |
---|
| 1453 | +/* |
---|
| 1454 | + * Tracepoints for kvm_hv_send_ipi. |
---|
| 1455 | + */ |
---|
| 1456 | +TRACE_EVENT(kvm_hv_send_ipi, |
---|
| 1457 | + TP_PROTO(u32 vector, u64 processor_mask), |
---|
| 1458 | + TP_ARGS(vector, processor_mask), |
---|
| 1459 | + |
---|
| 1460 | + TP_STRUCT__entry( |
---|
| 1461 | + __field(u32, vector) |
---|
| 1462 | + __field(u64, processor_mask) |
---|
| 1463 | + ), |
---|
| 1464 | + |
---|
| 1465 | + TP_fast_assign( |
---|
| 1466 | + __entry->vector = vector; |
---|
| 1467 | + __entry->processor_mask = processor_mask; |
---|
| 1468 | + ), |
---|
| 1469 | + |
---|
| 1470 | + TP_printk("vector %x processor_mask 0x%llx", |
---|
| 1471 | + __entry->vector, __entry->processor_mask) |
---|
| 1472 | +); |
---|
| 1473 | + |
---|
| 1474 | +TRACE_EVENT(kvm_hv_send_ipi_ex, |
---|
| 1475 | + TP_PROTO(u32 vector, u64 format, u64 valid_bank_mask), |
---|
| 1476 | + TP_ARGS(vector, format, valid_bank_mask), |
---|
| 1477 | + |
---|
| 1478 | + TP_STRUCT__entry( |
---|
| 1479 | + __field(u32, vector) |
---|
| 1480 | + __field(u64, format) |
---|
| 1481 | + __field(u64, valid_bank_mask) |
---|
| 1482 | + ), |
---|
| 1483 | + |
---|
| 1484 | + TP_fast_assign( |
---|
| 1485 | + __entry->vector = vector; |
---|
| 1486 | + __entry->format = format; |
---|
| 1487 | + __entry->valid_bank_mask = valid_bank_mask; |
---|
| 1488 | + ), |
---|
| 1489 | + |
---|
| 1490 | + TP_printk("vector %x format %llx valid_bank_mask 0x%llx", |
---|
| 1491 | + __entry->vector, __entry->format, |
---|
| 1492 | + __entry->valid_bank_mask) |
---|
| 1493 | +); |
---|
| 1494 | + |
---|
| 1495 | +TRACE_EVENT(kvm_pv_tlb_flush, |
---|
| 1496 | + TP_PROTO(unsigned int vcpu_id, bool need_flush_tlb), |
---|
| 1497 | + TP_ARGS(vcpu_id, need_flush_tlb), |
---|
| 1498 | + |
---|
| 1499 | + TP_STRUCT__entry( |
---|
| 1500 | + __field( unsigned int, vcpu_id ) |
---|
| 1501 | + __field( bool, need_flush_tlb ) |
---|
| 1502 | + ), |
---|
| 1503 | + |
---|
| 1504 | + TP_fast_assign( |
---|
| 1505 | + __entry->vcpu_id = vcpu_id; |
---|
| 1506 | + __entry->need_flush_tlb = need_flush_tlb; |
---|
| 1507 | + ), |
---|
| 1508 | + |
---|
| 1509 | + TP_printk("vcpu %u need_flush_tlb %s", __entry->vcpu_id, |
---|
| 1510 | + __entry->need_flush_tlb ? "true" : "false") |
---|
| 1511 | +); |
---|
| 1512 | + |
---|
| 1513 | +/* |
---|
| 1514 | + * Tracepoint for failed nested VMX VM-Enter. |
---|
| 1515 | + */ |
---|
| 1516 | +TRACE_EVENT(kvm_nested_vmenter_failed, |
---|
| 1517 | + TP_PROTO(const char *msg, u32 err), |
---|
| 1518 | + TP_ARGS(msg, err), |
---|
| 1519 | + |
---|
| 1520 | + TP_STRUCT__entry( |
---|
| 1521 | + __string(msg, msg) |
---|
| 1522 | + __field(u32, err) |
---|
| 1523 | + ), |
---|
| 1524 | + |
---|
| 1525 | + TP_fast_assign( |
---|
| 1526 | + __assign_str(msg, msg); |
---|
| 1527 | + __entry->err = err; |
---|
| 1528 | + ), |
---|
| 1529 | + |
---|
| 1530 | + TP_printk("%s%s", __get_str(msg), !__entry->err ? "" : |
---|
| 1531 | + __print_symbolic(__entry->err, VMX_VMENTER_INSTRUCTION_ERRORS)) |
---|
| 1532 | +); |
---|
| 1533 | + |
---|
| 1534 | +/* |
---|
| 1535 | + * Tracepoint for syndbg_set_msr. |
---|
| 1536 | + */ |
---|
| 1537 | +TRACE_EVENT(kvm_hv_syndbg_set_msr, |
---|
| 1538 | + TP_PROTO(int vcpu_id, u32 vp_index, u32 msr, u64 data), |
---|
| 1539 | + TP_ARGS(vcpu_id, vp_index, msr, data), |
---|
| 1540 | + |
---|
| 1541 | + TP_STRUCT__entry( |
---|
| 1542 | + __field(int, vcpu_id) |
---|
| 1543 | + __field(u32, vp_index) |
---|
| 1544 | + __field(u32, msr) |
---|
| 1545 | + __field(u64, data) |
---|
| 1546 | + ), |
---|
| 1547 | + |
---|
| 1548 | + TP_fast_assign( |
---|
| 1549 | + __entry->vcpu_id = vcpu_id; |
---|
| 1550 | + __entry->vp_index = vp_index; |
---|
| 1551 | + __entry->msr = msr; |
---|
| 1552 | + __entry->data = data; |
---|
| 1553 | + ), |
---|
| 1554 | + |
---|
| 1555 | + TP_printk("vcpu_id %d vp_index %u msr 0x%x data 0x%llx", |
---|
| 1556 | + __entry->vcpu_id, __entry->vp_index, __entry->msr, |
---|
| 1557 | + __entry->data) |
---|
| 1558 | +); |
---|
| 1559 | + |
---|
| 1560 | +/* |
---|
| 1561 | + * Tracepoint for syndbg_get_msr. |
---|
| 1562 | + */ |
---|
| 1563 | +TRACE_EVENT(kvm_hv_syndbg_get_msr, |
---|
| 1564 | + TP_PROTO(int vcpu_id, u32 vp_index, u32 msr, u64 data), |
---|
| 1565 | + TP_ARGS(vcpu_id, vp_index, msr, data), |
---|
| 1566 | + |
---|
| 1567 | + TP_STRUCT__entry( |
---|
| 1568 | + __field(int, vcpu_id) |
---|
| 1569 | + __field(u32, vp_index) |
---|
| 1570 | + __field(u32, msr) |
---|
| 1571 | + __field(u64, data) |
---|
| 1572 | + ), |
---|
| 1573 | + |
---|
| 1574 | + TP_fast_assign( |
---|
| 1575 | + __entry->vcpu_id = vcpu_id; |
---|
| 1576 | + __entry->vp_index = vp_index; |
---|
| 1577 | + __entry->msr = msr; |
---|
| 1578 | + __entry->data = data; |
---|
| 1579 | + ), |
---|
| 1580 | + |
---|
| 1581 | + TP_printk("vcpu_id %d vp_index %u msr 0x%x data 0x%llx", |
---|
| 1582 | + __entry->vcpu_id, __entry->vp_index, __entry->msr, |
---|
| 1583 | + __entry->data) |
---|
| 1584 | +); |
---|
1421 | 1585 | #endif /* _TRACE_KVM_H */ |
---|
1422 | 1586 | |
---|
1423 | 1587 | #undef TRACE_INCLUDE_PATH |
---|
1424 | | -#define TRACE_INCLUDE_PATH arch/x86/kvm |
---|
| 1588 | +#define TRACE_INCLUDE_PATH ../../arch/x86/kvm |
---|
1425 | 1589 | #undef TRACE_INCLUDE_FILE |
---|
1426 | 1590 | #define TRACE_INCLUDE_FILE trace |
---|
1427 | 1591 | |
---|