OSDN Git Service

KVM: x86: Print guest pgd in kvm_nested_vmenter()
authorMingwei Zhang <mizhang@google.com>
Thu, 25 Aug 2022 22:57:55 +0000 (22:57 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 26 Sep 2022 16:02:33 +0000 (12:02 -0400)
Print guest pgd in kvm_nested_vmenter() to enrich the information for
tracing. When tdp is enabled, print the value of tdp page table (EPT/NPT);
when tdp is disabled, print the value of non-nested CR3.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Mingwei Zhang <mizhang@google.com>
Link: https://lore.kernel.org/r/20220825225755.907001-4-mizhang@google.com
[sean: print nested_cr3 vs. nested_eptp vs. guest_cr3]
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm/nested.c
arch/x86/kvm/trace.h
arch/x86/kvm/vmx/nested.c

index 540a372..66f63e5 100644 (file)
@@ -787,6 +787,8 @@ int enter_svm_guest_mode(struct kvm_vcpu *vcpu, u64 vmcb12_gpa,
                                 vmcb12->control.int_ctl,
                                 vmcb12->control.event_inj,
                                 vmcb12->control.nested_ctl,
+                                vmcb12->control.nested_cr3,
+                                vmcb12->save.cr3,
                                 KVM_ISA_SVM);
 
        trace_kvm_nested_intercepts(vmcb12->control.intercepts[INTERCEPT_CR] & 0xffff,
index d35844a..bc25589 100644 (file)
@@ -596,8 +596,10 @@ TRACE_EVENT(kvm_pv_eoi,
  */
 TRACE_EVENT(kvm_nested_vmenter,
            TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl,
-                    __u32 event_inj, bool tdp_enabled, __u32 isa),
-           TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, tdp_enabled, isa),
+                    __u32 event_inj, bool tdp_enabled, __u64 guest_tdp_pgd,
+                    __u64 guest_cr3, __u32 isa),
+           TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, tdp_enabled,
+                   guest_tdp_pgd, guest_cr3, isa),
 
        TP_STRUCT__entry(
                __field(        __u64,          rip             )
@@ -606,6 +608,7 @@ TRACE_EVENT(kvm_nested_vmenter,
                __field(        __u32,          int_ctl         )
                __field(        __u32,          event_inj       )
                __field(        bool,           tdp_enabled     )
+               __field(        __u64,          guest_pgd       )
                __field(        __u32,          isa             )
        ),
 
@@ -616,11 +619,12 @@ TRACE_EVENT(kvm_nested_vmenter,
                __entry->int_ctl        = int_ctl;
                __entry->event_inj      = event_inj;
                __entry->tdp_enabled    = tdp_enabled;
+               __entry->guest_pgd      = tdp_enabled ? guest_tdp_pgd : guest_cr3;
                __entry->isa            = isa;
        ),
 
        TP_printk("rip: 0x%016llx %s: 0x%016llx nested_rip: 0x%016llx "
-                 "int_ctl: 0x%08x event_inj: 0x%08x nested_%s: %s",
+                 "int_ctl: 0x%08x event_inj: 0x%08x nested_%s=%s %s: 0x%016llx",
                  __entry->rip,
                  __entry->isa == KVM_ISA_VMX ? "vmcs" : "vmcb",
                  __entry->vmcb,
@@ -628,7 +632,10 @@ TRACE_EVENT(kvm_nested_vmenter,
                  __entry->int_ctl,
                  __entry->event_inj,
                  __entry->isa == KVM_ISA_VMX ? "ept" : "npt",
-                 __entry->tdp_enabled ? "on" : "off")
+                 __entry->tdp_enabled ? "y" : "n",
+                 !__entry->tdp_enabled ? "guest_cr3" :
+                 __entry->isa == KVM_ISA_VMX ? "nested_eptp" : "nested_cr3",
+                 __entry->guest_pgd)
 );
 
 TRACE_EVENT(kvm_nested_intercepts,
index f72fe94..f963e5c 100644 (file)
@@ -3370,6 +3370,8 @@ enum nvmx_vmentry_status nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu,
                                 vmcs12->guest_intr_status,
                                 vmcs12->vm_entry_intr_info_field,
                                 vmcs12->secondary_vm_exec_control & SECONDARY_EXEC_ENABLE_EPT,
+                                vmcs12->ept_pointer,
+                                vmcs12->guest_cr3,
                                 KVM_ISA_VMX);
 
        kvm_service_local_tlb_flush_requests(vcpu);