Message ID | 20220508040233.931710-1-jmattson@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] KVM: VMX: Print VM-instruction error when it may be helpful | expand |
On Sat, May 07, 2022, Jim Mattson wrote: > From: David Matlack <dmatlack@google.com> > > Include the value of the "VM-instruction error" field from the current > VMCS (if any) in the error message for VMCLEAR and VMPTRLD, since each > of these instructions may result in more than one VM-instruction > error. Previously, this field was only reported for VMWRITE errors. > > Signed-off-by: David Matlack <dmatlack@google.com> > [Rebased and refactored code; dropped the error number for INVVPID and > INVEPT; reworded commit message.] > Signed-off-by: Jim Mattson <jmattson@google.com> > --- > arch/x86/kvm/vmx/vmx.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index d58b763df855..a25da991da07 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -392,12 +392,14 @@ noinline void vmwrite_error(unsigned long field, unsigned long value) > > noinline void vmclear_error(struct vmcs *vmcs, u64 phys_addr) > { > - vmx_insn_failed("kvm: vmclear failed: %p/%llx\n", vmcs, phys_addr); > + vmx_insn_failed("kvm: vmclear failed: %p/%llx err=%d\n", I highly doubt it will ever matter, but arguably this should be %u, not %d. > + vmcs, phys_addr, vmcs_read32(VM_INSTRUCTION_ERROR)); > } > > noinline void vmptrld_error(struct vmcs *vmcs, u64 phys_addr) > { > - vmx_insn_failed("kvm: vmptrld failed: %p/%llx\n", vmcs, phys_addr); > + vmx_insn_failed("kvm: vmptrld failed: %p/%llx err=%d\n", > + vmcs, phys_addr, vmcs_read32(VM_INSTRUCTION_ERROR)); > } > > noinline void invvpid_error(unsigned long ext, u16 vpid, gva_t gva) > -- > 2.36.0.512.ge40c2bad7a-goog >
On Tue, May 10, 2022 at 9:27 AM Sean Christopherson <seanjc@google.com> wrote: > > noinline void vmclear_error(struct vmcs *vmcs, u64 phys_addr) > > { > > - vmx_insn_failed("kvm: vmclear failed: %p/%llx\n", vmcs, phys_addr); > > + vmx_insn_failed("kvm: vmclear failed: %p/%llx err=%d\n", > > I highly doubt it will ever matter, but arguably this should be %u, not %d. > :-@ Okay; I will send out a V3, along with a separate patch to fix VMWRITE.
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index d58b763df855..a25da991da07 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -392,12 +392,14 @@ noinline void vmwrite_error(unsigned long field, unsigned long value) noinline void vmclear_error(struct vmcs *vmcs, u64 phys_addr) { - vmx_insn_failed("kvm: vmclear failed: %p/%llx\n", vmcs, phys_addr); + vmx_insn_failed("kvm: vmclear failed: %p/%llx err=%d\n", + vmcs, phys_addr, vmcs_read32(VM_INSTRUCTION_ERROR)); } noinline void vmptrld_error(struct vmcs *vmcs, u64 phys_addr) { - vmx_insn_failed("kvm: vmptrld failed: %p/%llx\n", vmcs, phys_addr); + vmx_insn_failed("kvm: vmptrld failed: %p/%llx err=%d\n", + vmcs, phys_addr, vmcs_read32(VM_INSTRUCTION_ERROR)); } noinline void invvpid_error(unsigned long ext, u16 vpid, gva_t gva)