linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves
@ 2021-03-18 12:08 David Edmondson
  2021-03-18 12:08 ` [PATCH v5 1/5] KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid David Edmondson
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-18 12:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov,
	David Edmondson

v2:
- Don't use vcpu->arch.efer when GUEST_IA32_EFER is not available (Paolo).
- Dump the MSR autoload/autosave lists (Paolo).

v3:
- Rebase to master.
- Check only the load controls (Sean).
- Always show the PTPRs from the VMCS if they exist (Jim/Sean).
- Dig EFER out of the MSR autoload list if it's there (Paulo).
- Calculate and show the effective EFER if it is not coming from
  either the VMCS or the MSR autoload list (Sean).

v4:
- Ensure that each changeset builds with just the previous set.

v5:
- Rebase.
- Remove some cruft from changeset comments.
- Add S-by as appropriate.

David Edmondson (5):
  KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid
  KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS
  KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT
  KVM: x86: dump_vmcs should show the effective EFER
  KVM: x86: dump_vmcs should include the autoload/autostore MSR lists

 arch/x86/kvm/vmx/vmx.c | 58 +++++++++++++++++++++++++++++-------------
 arch/x86/kvm/vmx/vmx.h |  2 +-
 2 files changed, 42 insertions(+), 18 deletions(-)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v5 1/5] KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
@ 2021-03-18 12:08 ` David Edmondson
  2021-03-18 12:08 ` [PATCH v5 2/5] KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS David Edmondson
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-18 12:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov,
	David Edmondson

If the VM entry/exit controls for loading/saving MSR_EFER are either
not available (an older processor or explicitly disabled) or not
used (host and guest values are the same), reading GUEST_IA32_EFER
from the VMCS returns an inaccurate value.

Because of this, in dump_vmcs() don't use GUEST_IA32_EFER to decide
whether to print the PDPTRs - always do so if the fields exist.

Fixes: 4eb64dce8d0a ("KVM: x86: dump VMCS on invalid entry")
Signed-off-by: David Edmondson <david.edmondson@oracle.com>
---
 arch/x86/kvm/vmx/vmx.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 32cf8287d4a7..b0ee9d240f73 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -5792,7 +5792,6 @@ void dump_vmcs(void)
 	u32 vmentry_ctl, vmexit_ctl;
 	u32 cpu_based_exec_ctrl, pin_based_exec_ctrl, secondary_exec_control;
 	unsigned long cr4;
-	u64 efer;
 
 	if (!dump_invalid_vmcs) {
 		pr_warn_ratelimited("set kvm_intel.dump_invalid_vmcs=1 to dump internal KVM state.\n");
@@ -5804,7 +5803,6 @@ void dump_vmcs(void)
 	cpu_based_exec_ctrl = vmcs_read32(CPU_BASED_VM_EXEC_CONTROL);
 	pin_based_exec_ctrl = vmcs_read32(PIN_BASED_VM_EXEC_CONTROL);
 	cr4 = vmcs_readl(GUEST_CR4);
-	efer = vmcs_read64(GUEST_IA32_EFER);
 	secondary_exec_control = 0;
 	if (cpu_has_secondary_exec_ctrls())
 		secondary_exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
@@ -5816,9 +5814,7 @@ void dump_vmcs(void)
 	pr_err("CR4: actual=0x%016lx, shadow=0x%016lx, gh_mask=%016lx\n",
 	       cr4, vmcs_readl(CR4_READ_SHADOW), vmcs_readl(CR4_GUEST_HOST_MASK));
 	pr_err("CR3 = 0x%016lx\n", vmcs_readl(GUEST_CR3));
-	if ((secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT) &&
-	    (cr4 & X86_CR4_PAE) && !(efer & EFER_LMA))
-	{
+	if (cpu_has_vmx_ept()) {
 		pr_err("PDPTR0 = 0x%016llx  PDPTR1 = 0x%016llx\n",
 		       vmcs_read64(GUEST_PDPTR0), vmcs_read64(GUEST_PDPTR1));
 		pr_err("PDPTR2 = 0x%016llx  PDPTR3 = 0x%016llx\n",
@@ -5844,7 +5840,8 @@ void dump_vmcs(void)
 	if ((vmexit_ctl & (VM_EXIT_SAVE_IA32_PAT | VM_EXIT_SAVE_IA32_EFER)) ||
 	    (vmentry_ctl & (VM_ENTRY_LOAD_IA32_PAT | VM_ENTRY_LOAD_IA32_EFER)))
 		pr_err("EFER =     0x%016llx  PAT = 0x%016llx\n",
-		       efer, vmcs_read64(GUEST_IA32_PAT));
+		       vmcs_read64(GUEST_IA32_EFER),
+		       vmcs_read64(GUEST_IA32_PAT));
 	pr_err("DebugCtl = 0x%016llx  DebugExceptions = 0x%016lx\n",
 	       vmcs_read64(GUEST_IA32_DEBUGCTL),
 	       vmcs_readl(GUEST_PENDING_DBG_EXCEPTIONS));
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v5 2/5] KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
  2021-03-18 12:08 ` [PATCH v5 1/5] KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid David Edmondson
@ 2021-03-18 12:08 ` David Edmondson
  2021-03-18 12:08 ` [PATCH v5 3/5] KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT David Edmondson
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-18 12:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov,
	David Edmondson

Show EFER and PAT based on their individual entry/exit controls.

Signed-off-by: David Edmondson <david.edmondson@oracle.com>
---
 arch/x86/kvm/vmx/vmx.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index b0ee9d240f73..6ab9e4d69aac 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -5837,11 +5837,12 @@ void dump_vmcs(void)
 	vmx_dump_sel("LDTR:", GUEST_LDTR_SELECTOR);
 	vmx_dump_dtsel("IDTR:", GUEST_IDTR_LIMIT);
 	vmx_dump_sel("TR:  ", GUEST_TR_SELECTOR);
-	if ((vmexit_ctl & (VM_EXIT_SAVE_IA32_PAT | VM_EXIT_SAVE_IA32_EFER)) ||
-	    (vmentry_ctl & (VM_ENTRY_LOAD_IA32_PAT | VM_ENTRY_LOAD_IA32_EFER)))
-		pr_err("EFER =     0x%016llx  PAT = 0x%016llx\n",
-		       vmcs_read64(GUEST_IA32_EFER),
-		       vmcs_read64(GUEST_IA32_PAT));
+	if ((vmexit_ctl & VM_EXIT_SAVE_IA32_EFER) ||
+	    (vmentry_ctl & VM_ENTRY_LOAD_IA32_EFER))
+		pr_err("EFER= 0x%016llx\n", vmcs_read64(GUEST_IA32_EFER));
+	if ((vmexit_ctl & VM_EXIT_SAVE_IA32_PAT) ||
+	    (vmentry_ctl & VM_ENTRY_LOAD_IA32_PAT))
+		pr_err("PAT = 0x%016llx\n", vmcs_read64(GUEST_IA32_PAT));
 	pr_err("DebugCtl = 0x%016llx  DebugExceptions = 0x%016lx\n",
 	       vmcs_read64(GUEST_IA32_DEBUGCTL),
 	       vmcs_readl(GUEST_PENDING_DBG_EXCEPTIONS));
@@ -5878,10 +5879,10 @@ void dump_vmcs(void)
 	       vmcs_readl(HOST_IA32_SYSENTER_ESP),
 	       vmcs_read32(HOST_IA32_SYSENTER_CS),
 	       vmcs_readl(HOST_IA32_SYSENTER_EIP));
-	if (vmexit_ctl & (VM_EXIT_LOAD_IA32_PAT | VM_EXIT_LOAD_IA32_EFER))
-		pr_err("EFER = 0x%016llx  PAT = 0x%016llx\n",
-		       vmcs_read64(HOST_IA32_EFER),
-		       vmcs_read64(HOST_IA32_PAT));
+	if (vmexit_ctl & VM_EXIT_LOAD_IA32_EFER)
+		pr_err("EFER= 0x%016llx\n", vmcs_read64(HOST_IA32_EFER));
+	if (vmexit_ctl & VM_EXIT_LOAD_IA32_PAT)
+		pr_err("PAT = 0x%016llx\n", vmcs_read64(HOST_IA32_PAT));
 	if (cpu_has_load_perf_global_ctrl() &&
 	    vmexit_ctl & VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL)
 		pr_err("PerfGlobCtl = 0x%016llx\n",
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v5 3/5] KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
  2021-03-18 12:08 ` [PATCH v5 1/5] KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid David Edmondson
  2021-03-18 12:08 ` [PATCH v5 2/5] KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS David Edmondson
@ 2021-03-18 12:08 ` David Edmondson
  2021-03-18 12:08 ` [PATCH v5 4/5] KVM: x86: dump_vmcs should show the effective EFER David Edmondson
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-18 12:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov,
	David Edmondson

When deciding whether to dump the GUEST_IA32_EFER and GUEST_IA32_PAT
fields of the VMCS, examine only the VM entry load controls, as saving
on VM exit has no effect on whether VM entry succeeds or fails.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: David Edmondson <david.edmondson@oracle.com>
---
 arch/x86/kvm/vmx/vmx.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 6ab9e4d69aac..67e574deced1 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -5837,11 +5837,9 @@ void dump_vmcs(void)
 	vmx_dump_sel("LDTR:", GUEST_LDTR_SELECTOR);
 	vmx_dump_dtsel("IDTR:", GUEST_IDTR_LIMIT);
 	vmx_dump_sel("TR:  ", GUEST_TR_SELECTOR);
-	if ((vmexit_ctl & VM_EXIT_SAVE_IA32_EFER) ||
-	    (vmentry_ctl & VM_ENTRY_LOAD_IA32_EFER))
+	if (vmentry_ctl & VM_ENTRY_LOAD_IA32_EFER)
 		pr_err("EFER= 0x%016llx\n", vmcs_read64(GUEST_IA32_EFER));
-	if ((vmexit_ctl & VM_EXIT_SAVE_IA32_PAT) ||
-	    (vmentry_ctl & VM_ENTRY_LOAD_IA32_PAT))
+	if (vmentry_ctl & VM_ENTRY_LOAD_IA32_PAT)
 		pr_err("PAT = 0x%016llx\n", vmcs_read64(GUEST_IA32_PAT));
 	pr_err("DebugCtl = 0x%016llx  DebugExceptions = 0x%016lx\n",
 	       vmcs_read64(GUEST_IA32_DEBUGCTL),
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v5 4/5] KVM: x86: dump_vmcs should show the effective EFER
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
                   ` (2 preceding siblings ...)
  2021-03-18 12:08 ` [PATCH v5 3/5] KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT David Edmondson
@ 2021-03-18 12:08 ` David Edmondson
  2021-03-18 12:08 ` [PATCH v5 5/5] KVM: x86: dump_vmcs should include the autoload/autostore MSR lists David Edmondson
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-18 12:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov,
	David Edmondson

If EFER is not being loaded from the VMCS, show the effective value by
reference to the MSR autoload list or calculation.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: David Edmondson <david.edmondson@oracle.com>
---
 arch/x86/kvm/vmx/vmx.c | 20 ++++++++++++++++----
 arch/x86/kvm/vmx/vmx.h |  2 +-
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 67e574deced1..0a41a8ec2bd9 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -5787,11 +5787,13 @@ static void vmx_dump_dtsel(char *name, uint32_t limit)
 	       vmcs_readl(limit + GUEST_GDTR_BASE - GUEST_GDTR_LIMIT));
 }
 
-void dump_vmcs(void)
+void dump_vmcs(struct kvm_vcpu *vcpu)
 {
+	struct vcpu_vmx *vmx = to_vmx(vcpu);
 	u32 vmentry_ctl, vmexit_ctl;
 	u32 cpu_based_exec_ctrl, pin_based_exec_ctrl, secondary_exec_control;
 	unsigned long cr4;
+	int efer_slot;
 
 	if (!dump_invalid_vmcs) {
 		pr_warn_ratelimited("set kvm_intel.dump_invalid_vmcs=1 to dump internal KVM state.\n");
@@ -5837,8 +5839,18 @@ void dump_vmcs(void)
 	vmx_dump_sel("LDTR:", GUEST_LDTR_SELECTOR);
 	vmx_dump_dtsel("IDTR:", GUEST_IDTR_LIMIT);
 	vmx_dump_sel("TR:  ", GUEST_TR_SELECTOR);
+	efer_slot = vmx_find_loadstore_msr_slot(&vmx->msr_autoload.guest, MSR_EFER);
 	if (vmentry_ctl & VM_ENTRY_LOAD_IA32_EFER)
 		pr_err("EFER= 0x%016llx\n", vmcs_read64(GUEST_IA32_EFER));
+	else if (efer_slot >= 0)
+		pr_err("EFER= 0x%016llx (autoload)\n",
+		       vmx->msr_autoload.guest.val[efer_slot].value);
+	else if (vmentry_ctl & VM_ENTRY_IA32E_MODE)
+		pr_err("EFER= 0x%016llx (effective)\n",
+		       vcpu->arch.efer | (EFER_LMA | EFER_LME));
+	else
+		pr_err("EFER= 0x%016llx (effective)\n",
+		       vcpu->arch.efer & ~(EFER_LMA | EFER_LME));
 	if (vmentry_ctl & VM_ENTRY_LOAD_IA32_PAT)
 		pr_err("PAT = 0x%016llx\n", vmcs_read64(GUEST_IA32_PAT));
 	pr_err("DebugCtl = 0x%016llx  DebugExceptions = 0x%016lx\n",
@@ -5993,7 +6005,7 @@ static int __vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
 	}
 
 	if (exit_reason.failed_vmentry) {
-		dump_vmcs();
+		dump_vmcs(vcpu);
 		vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY;
 		vcpu->run->fail_entry.hardware_entry_failure_reason
 			= exit_reason.full;
@@ -6002,7 +6014,7 @@ static int __vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
 	}
 
 	if (unlikely(vmx->fail)) {
-		dump_vmcs();
+		dump_vmcs(vcpu);
 		vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY;
 		vcpu->run->fail_entry.hardware_entry_failure_reason
 			= vmcs_read32(VM_INSTRUCTION_ERROR);
@@ -6088,7 +6100,7 @@ static int __vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
 unexpected_vmexit:
 	vcpu_unimpl(vcpu, "vmx: unexpected exit reason 0x%x\n",
 		    exit_reason.full);
-	dump_vmcs();
+	dump_vmcs(vcpu);
 	vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
 	vcpu->run->internal.suberror =
 			KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON;
diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h
index 89da5e1251f1..c35af2daa0bd 100644
--- a/arch/x86/kvm/vmx/vmx.h
+++ b/arch/x86/kvm/vmx/vmx.h
@@ -543,6 +543,6 @@ static inline bool vmx_guest_state_valid(struct kvm_vcpu *vcpu)
 	return is_unrestricted_guest(vcpu) || __vmx_guest_state_valid(vcpu);
 }
 
-void dump_vmcs(void);
+void dump_vmcs(struct kvm_vcpu *vcpu);
 
 #endif /* __KVM_X86_VMX_H */
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v5 5/5] KVM: x86: dump_vmcs should include the autoload/autostore MSR lists
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
                   ` (3 preceding siblings ...)
  2021-03-18 12:08 ` [PATCH v5 4/5] KVM: x86: dump_vmcs should show the effective EFER David Edmondson
@ 2021-03-18 12:08 ` David Edmondson
  2021-03-29 18:23 ` [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
  2021-04-01 12:54 ` Paolo Bonzini
  6 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-18 12:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov,
	David Edmondson

When dumping the current VMCS state, include the MSRs that are being
automatically loaded/stored during VM entry/exit.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: David Edmondson <david.edmondson@oracle.com>
---
 arch/x86/kvm/vmx/vmx.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 0a41a8ec2bd9..e001c3bb4334 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -5787,6 +5787,16 @@ static void vmx_dump_dtsel(char *name, uint32_t limit)
 	       vmcs_readl(limit + GUEST_GDTR_BASE - GUEST_GDTR_LIMIT));
 }
 
+static void vmx_dump_msrs(char *name, struct vmx_msrs *m)
+{
+	unsigned int i;
+	struct vmx_msr_entry *e;
+
+	pr_err("MSR %s:\n", name);
+	for (i = 0, e = m->val; i < m->nr; ++i, ++e)
+		pr_err("  %2d: msr=0x%08x value=0x%016llx\n", i, e->index, e->value);
+}
+
 void dump_vmcs(struct kvm_vcpu *vcpu)
 {
 	struct vcpu_vmx *vmx = to_vmx(vcpu);
@@ -5868,6 +5878,10 @@ void dump_vmcs(struct kvm_vcpu *vcpu)
 	if (secondary_exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY)
 		pr_err("InterruptStatus = %04x\n",
 		       vmcs_read16(GUEST_INTR_STATUS));
+	if (vmcs_read32(VM_ENTRY_MSR_LOAD_COUNT) > 0)
+		vmx_dump_msrs("guest autoload", &vmx->msr_autoload.guest);
+	if (vmcs_read32(VM_EXIT_MSR_STORE_COUNT) > 0)
+		vmx_dump_msrs("guest autostore", &vmx->msr_autostore.guest);
 
 	pr_err("*** Host State ***\n");
 	pr_err("RIP = 0x%016lx  RSP = 0x%016lx\n",
@@ -5897,6 +5911,8 @@ void dump_vmcs(struct kvm_vcpu *vcpu)
 	    vmexit_ctl & VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL)
 		pr_err("PerfGlobCtl = 0x%016llx\n",
 		       vmcs_read64(HOST_IA32_PERF_GLOBAL_CTRL));
+	if (vmcs_read32(VM_EXIT_MSR_LOAD_COUNT) > 0)
+		vmx_dump_msrs("host autoload", &vmx->msr_autoload.host);
 
 	pr_err("*** Control State ***\n");
 	pr_err("PinBased=%08x CPUBased=%08x SecondaryExec=%08x\n",
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
                   ` (4 preceding siblings ...)
  2021-03-18 12:08 ` [PATCH v5 5/5] KVM: x86: dump_vmcs should include the autoload/autostore MSR lists David Edmondson
@ 2021-03-29 18:23 ` David Edmondson
  2021-04-01 12:54 ` Paolo Bonzini
  6 siblings, 0 replies; 8+ messages in thread
From: David Edmondson @ 2021-03-29 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, Paolo Bonzini, kvm,
	Wanpeng Li, x86, Borislav Petkov, Thomas Gleixner,
	Sean Christopherson, Jim Mattson, Vitaly Kuznetsov

On Thursday, 2021-03-18 at 12:08:36 GMT, David Edmondson wrote:

> v2:
> - Don't use vcpu->arch.efer when GUEST_IA32_EFER is not available (Paolo).
> - Dump the MSR autoload/autosave lists (Paolo).
>
> v3:
> - Rebase to master.
> - Check only the load controls (Sean).
> - Always show the PTPRs from the VMCS if they exist (Jim/Sean).
> - Dig EFER out of the MSR autoload list if it's there (Paulo).
> - Calculate and show the effective EFER if it is not coming from
>   either the VMCS or the MSR autoload list (Sean).
>
> v4:
> - Ensure that each changeset builds with just the previous set.
>
> v5:
> - Rebase.
> - Remove some cruft from changeset comments.
> - Add S-by as appropriate.

Any further comments or suggestions?

Thanks.

> David Edmondson (5):
>   KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid
>   KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS
>   KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT
>   KVM: x86: dump_vmcs should show the effective EFER
>   KVM: x86: dump_vmcs should include the autoload/autostore MSR lists
>
>  arch/x86/kvm/vmx/vmx.c | 58 +++++++++++++++++++++++++++++-------------
>  arch/x86/kvm/vmx/vmx.h |  2 +-
>  2 files changed, 42 insertions(+), 18 deletions(-)
>
> -- 
> 2.30.2

dme.
-- 
Everybody's got something to hide, 'cept me and my monkey.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves
  2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
                   ` (5 preceding siblings ...)
  2021-03-29 18:23 ` [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
@ 2021-04-01 12:54 ` Paolo Bonzini
  6 siblings, 0 replies; 8+ messages in thread
From: Paolo Bonzini @ 2021-04-01 12:54 UTC (permalink / raw)
  To: David Edmondson, linux-kernel
  Cc: Ingo Molnar, Joerg Roedel, H. Peter Anvin, kvm, Wanpeng Li, x86,
	Borislav Petkov, Thomas Gleixner, Sean Christopherson,
	Jim Mattson, Vitaly Kuznetsov

On 18/03/21 13:08, David Edmondson wrote:
> v2:
> - Don't use vcpu->arch.efer when GUEST_IA32_EFER is not available (Paolo).
> - Dump the MSR autoload/autosave lists (Paolo).
> 
> v3:
> - Rebase to master.
> - Check only the load controls (Sean).
> - Always show the PTPRs from the VMCS if they exist (Jim/Sean).
> - Dig EFER out of the MSR autoload list if it's there (Paulo).
> - Calculate and show the effective EFER if it is not coming from
>    either the VMCS or the MSR autoload list (Sean).
> 
> v4:
> - Ensure that each changeset builds with just the previous set.
> 
> v5:
> - Rebase.
> - Remove some cruft from changeset comments.
> - Add S-by as appropriate.
> 
> David Edmondson (5):
>    KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid
>    KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS
>    KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT
>    KVM: x86: dump_vmcs should show the effective EFER
>    KVM: x86: dump_vmcs should include the autoload/autostore MSR lists
> 
>   arch/x86/kvm/vmx/vmx.c | 58 +++++++++++++++++++++++++++++-------------
>   arch/x86/kvm/vmx/vmx.h |  2 +-
>   2 files changed, 42 insertions(+), 18 deletions(-)
> 

Queued, thanks.

Paolo


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-04-01 18:10 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-18 12:08 [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
2021-03-18 12:08 ` [PATCH v5 1/5] KVM: x86: dump_vmcs should not assume GUEST_IA32_EFER is valid David Edmondson
2021-03-18 12:08 ` [PATCH v5 2/5] KVM: x86: dump_vmcs should not conflate EFER and PAT presence in VMCS David Edmondson
2021-03-18 12:08 ` [PATCH v5 3/5] KVM: x86: dump_vmcs should consider only the load controls of EFER/PAT David Edmondson
2021-03-18 12:08 ` [PATCH v5 4/5] KVM: x86: dump_vmcs should show the effective EFER David Edmondson
2021-03-18 12:08 ` [PATCH v5 5/5] KVM: x86: dump_vmcs should include the autoload/autostore MSR lists David Edmondson
2021-03-29 18:23 ` [PATCH v5 0/5] KVM: x86: dump_vmcs: don't assume GUEST_IA32_EFER, show MSR autoloads/autosaves David Edmondson
2021-04-01 12:54 ` Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).