Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: Move arm64's MMU notifier trace events to generic code

Move arm64's MMU notifier trace events into common code in preparation
for doing the hva->gfn lookup in common code. The alternative would be
to trace the gfn instead of hva, but that's not obviously better and
could also be done in common code. Tracing the notifiers is also quite
handy for debug regardless of architecture.

Remove a completely redundant tracepoint from PPC e500.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20210326021957.1424875-10-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

authored by

Sean Christopherson and committed by
Paolo Bonzini
501b9185 5f7c292b

+78 -88
+2 -5
arch/arm64/kvm/mmu.c
··· 1111 1111 if (!kvm->arch.mmu.pgt) 1112 1112 return 0; 1113 1113 1114 - trace_kvm_unmap_hva_range(start, end); 1115 1114 handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, &flags); 1116 1115 return 0; 1117 1116 } ··· 1139 1140 1140 1141 if (!kvm->arch.mmu.pgt) 1141 1142 return 0; 1142 - 1143 - trace_kvm_set_spte_hva(hva); 1144 1143 1145 1144 /* 1146 1145 * We've moved a page around, probably through CoW, so let's treat it ··· 1170 1173 { 1171 1174 if (!kvm->arch.mmu.pgt) 1172 1175 return 0; 1173 - trace_kvm_age_hva(start, end); 1176 + 1174 1177 return handle_hva_to_gpa(kvm, start, end, kvm_age_hva_handler, NULL); 1175 1178 } 1176 1179 ··· 1178 1181 { 1179 1182 if (!kvm->arch.mmu.pgt) 1180 1183 return 0; 1181 - trace_kvm_test_age_hva(hva); 1184 + 1182 1185 return handle_hva_to_gpa(kvm, hva, hva + PAGE_SIZE, 1183 1186 kvm_test_age_hva_handler, NULL); 1184 1187 }
-66
arch/arm64/kvm/trace_arm.h
··· 135 135 __entry->vcpu_pc, __entry->instr, __entry->cpsr) 136 136 ); 137 137 138 - TRACE_EVENT(kvm_unmap_hva_range, 139 - TP_PROTO(unsigned long start, unsigned long end), 140 - TP_ARGS(start, end), 141 - 142 - TP_STRUCT__entry( 143 - __field( unsigned long, start ) 144 - __field( unsigned long, end ) 145 - ), 146 - 147 - TP_fast_assign( 148 - __entry->start = start; 149 - __entry->end = end; 150 - ), 151 - 152 - TP_printk("mmu notifier unmap range: %#016lx -- %#016lx", 153 - __entry->start, __entry->end) 154 - ); 155 - 156 - TRACE_EVENT(kvm_set_spte_hva, 157 - TP_PROTO(unsigned long hva), 158 - TP_ARGS(hva), 159 - 160 - TP_STRUCT__entry( 161 - __field( unsigned long, hva ) 162 - ), 163 - 164 - TP_fast_assign( 165 - __entry->hva = hva; 166 - ), 167 - 168 - TP_printk("mmu notifier set pte hva: %#016lx", __entry->hva) 169 - ); 170 - 171 - TRACE_EVENT(kvm_age_hva, 172 - TP_PROTO(unsigned long start, unsigned long end), 173 - TP_ARGS(start, end), 174 - 175 - TP_STRUCT__entry( 176 - __field( unsigned long, start ) 177 - __field( unsigned long, end ) 178 - ), 179 - 180 - TP_fast_assign( 181 - __entry->start = start; 182 - __entry->end = end; 183 - ), 184 - 185 - TP_printk("mmu notifier age hva: %#016lx -- %#016lx", 186 - __entry->start, __entry->end) 187 - ); 188 - 189 - TRACE_EVENT(kvm_test_age_hva, 190 - TP_PROTO(unsigned long hva), 191 - TP_ARGS(hva), 192 - 193 - TP_STRUCT__entry( 194 - __field( unsigned long, hva ) 195 - ), 196 - 197 - TP_fast_assign( 198 - __entry->hva = hva; 199 - ), 200 - 201 - TP_printk("mmu notifier test age hva: %#016lx", __entry->hva) 202 - ); 203 - 204 138 TRACE_EVENT(kvm_set_way_flush, 205 139 TP_PROTO(unsigned long vcpu_pc, bool cache), 206 140 TP_ARGS(vcpu_pc, cache),
-2
arch/powerpc/kvm/e500_mmu_host.c
··· 723 723 724 724 static int kvm_unmap_hva(struct kvm *kvm, unsigned long hva) 725 725 { 726 - trace_kvm_unmap_hva(hva); 727 - 728 726 /* 729 727 * Flush all shadow tlb entries everywhere. This is slow, but 730 728 * we are 100% sure that we catch the to be unmapped page
-15
arch/powerpc/kvm/trace_booke.h
··· 69 69 ) 70 70 ); 71 71 72 - TRACE_EVENT(kvm_unmap_hva, 73 - TP_PROTO(unsigned long hva), 74 - TP_ARGS(hva), 75 - 76 - TP_STRUCT__entry( 77 - __field( unsigned long, hva ) 78 - ), 79 - 80 - TP_fast_assign( 81 - __entry->hva = hva; 82 - ), 83 - 84 - TP_printk("unmap hva 0x%lx\n", __entry->hva) 85 - ); 86 - 87 72 TRACE_EVENT(kvm_booke206_stlb_write, 88 73 TP_PROTO(__u32 mas0, __u32 mas8, __u32 mas1, __u64 mas2, __u64 mas7_3), 89 74 TP_ARGS(mas0, mas8, mas1, mas2, mas7_3),
+66
include/trace/events/kvm.h
··· 462 462 TP_printk("vcpu %d", __entry->vcpu_id) 463 463 ); 464 464 465 + TRACE_EVENT(kvm_unmap_hva_range, 466 + TP_PROTO(unsigned long start, unsigned long end), 467 + TP_ARGS(start, end), 468 + 469 + TP_STRUCT__entry( 470 + __field( unsigned long, start ) 471 + __field( unsigned long, end ) 472 + ), 473 + 474 + TP_fast_assign( 475 + __entry->start = start; 476 + __entry->end = end; 477 + ), 478 + 479 + TP_printk("mmu notifier unmap range: %#016lx -- %#016lx", 480 + __entry->start, __entry->end) 481 + ); 482 + 483 + TRACE_EVENT(kvm_set_spte_hva, 484 + TP_PROTO(unsigned long hva), 485 + TP_ARGS(hva), 486 + 487 + TP_STRUCT__entry( 488 + __field( unsigned long, hva ) 489 + ), 490 + 491 + TP_fast_assign( 492 + __entry->hva = hva; 493 + ), 494 + 495 + TP_printk("mmu notifier set pte hva: %#016lx", __entry->hva) 496 + ); 497 + 498 + TRACE_EVENT(kvm_age_hva, 499 + TP_PROTO(unsigned long start, unsigned long end), 500 + TP_ARGS(start, end), 501 + 502 + TP_STRUCT__entry( 503 + __field( unsigned long, start ) 504 + __field( unsigned long, end ) 505 + ), 506 + 507 + TP_fast_assign( 508 + __entry->start = start; 509 + __entry->end = end; 510 + ), 511 + 512 + TP_printk("mmu notifier age hva: %#016lx -- %#016lx", 513 + __entry->start, __entry->end) 514 + ); 515 + 516 + TRACE_EVENT(kvm_test_age_hva, 517 + TP_PROTO(unsigned long hva), 518 + TP_ARGS(hva), 519 + 520 + TP_STRUCT__entry( 521 + __field( unsigned long, hva ) 522 + ), 523 + 524 + TP_fast_assign( 525 + __entry->hva = hva; 526 + ), 527 + 528 + TP_printk("mmu notifier test age hva: %#016lx", __entry->hva) 529 + ); 530 + 465 531 #endif /* _TRACE_KVM_MAIN_H */ 466 532 467 533 /* This part must be outside protection */
+10
virt/kvm/kvm_main.c
··· 459 459 struct kvm *kvm = mmu_notifier_to_kvm(mn); 460 460 int idx; 461 461 462 + trace_kvm_set_spte_hva(address); 463 + 462 464 idx = srcu_read_lock(&kvm->srcu); 463 465 464 466 KVM_MMU_LOCK(kvm); ··· 479 477 { 480 478 struct kvm *kvm = mmu_notifier_to_kvm(mn); 481 479 int need_tlb_flush = 0, idx; 480 + 481 + trace_kvm_unmap_hva_range(range->start, range->end); 482 482 483 483 idx = srcu_read_lock(&kvm->srcu); 484 484 KVM_MMU_LOCK(kvm); ··· 552 548 struct kvm *kvm = mmu_notifier_to_kvm(mn); 553 549 int young, idx; 554 550 551 + trace_kvm_age_hva(start, end); 552 + 555 553 idx = srcu_read_lock(&kvm->srcu); 556 554 KVM_MMU_LOCK(kvm); 557 555 ··· 574 568 { 575 569 struct kvm *kvm = mmu_notifier_to_kvm(mn); 576 570 int young, idx; 571 + 572 + trace_kvm_age_hva(start, end); 577 573 578 574 idx = srcu_read_lock(&kvm->srcu); 579 575 KVM_MMU_LOCK(kvm); ··· 605 597 { 606 598 struct kvm *kvm = mmu_notifier_to_kvm(mn); 607 599 int young, idx; 600 + 601 + trace_kvm_test_age_hva(address); 608 602 609 603 idx = srcu_read_lock(&kvm->srcu); 610 604 KVM_MMU_LOCK(kvm);