mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/hvm: Corrections and improvements to unhandled vmexit logging
* Use gprintk rather than gdprintk. These logging messages shouldn't disappear in release builds, as they usually happen immediately before a domain crash. Raise them from WARNING to ERR. * Format the vmexit reason in the same base as is used in the vendor manuals (decimal for Intel, hex for AMD), and consistently use 0x for hex numbers. * Consistently use "Unexpected vmexit" terminology. In particular, this corrects the information printed for nested VT-x, and actually prints information for nested SVM. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Release-acked-by: Julien Grall <julien.grall@arm.com>
This commit is contained in:
1 parent
68e9e96953
commit
ef3e8db806
4 files changed
+8
-7
No files matched your search
@@ -1406,6 +1406,8 @@ nestedsvm_check_intercepts(struct vcpu *v, struct cpu_user_regs *regs,
|
||||
/* Always let the guest handle VMMCALL/VMCALL */
|
||||
return NESTEDHVM_VMEXIT_INJECT;
|
||||
default:
|
||||
gprintk(XENLOG_ERR, "Unexpected nested vmexit: reason %#"PRIx64"\n",
|
||||
exitcode);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -2833,10 +2833,9 @@ void svm_vmexit_handler(struct cpu_user_regs *regs)
|
||||
|
||||
default:
|
||||
unexpected_exit_type:
|
||||
gdprintk(XENLOG_ERR, "unexpected VMEXIT: exit reason = %#"PRIx64", "
|
||||
"exitinfo1 = %#"PRIx64", exitinfo2 = %#"PRIx64"\n",
|
||||
exit_reason,
|
||||
(u64)vmcb->exitinfo1, (u64)vmcb->exitinfo2);
|
||||
gprintk(XENLOG_ERR, "Unexpected vmexit: reason %#"PRIx64", "
|
||||
"exitinfo1 %#"PRIx64", exitinfo2 %#"PRIx64"\n",
|
||||
exit_reason, vmcb->exitinfo1, vmcb->exitinfo2);
|
||||
svm_crash_or_fault(v);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4106,7 +4106,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
|
||||
/* fall through */
|
||||
default:
|
||||
exit_and_crash:
|
||||
gdprintk(XENLOG_WARNING, "Bad vmexit (reason %#lx)\n", exit_reason);
|
||||
gprintk(XENLOG_ERR, "Unexpected vmexit: reason %lu\n", exit_reason);
|
||||
|
||||
if ( vmx_get_cpl() )
|
||||
hvm_inject_hw_exception(TRAP_invalid_op,
|
||||
|
||||
@@ -2550,8 +2550,8 @@ int nvmx_n2_vmexit_handler(struct cpu_user_regs *regs,
|
||||
nvcpu->nv_vmexit_pending = 1;
|
||||
break;
|
||||
default:
|
||||
gdprintk(XENLOG_WARNING, "Unknown nested vmexit reason %x.\n",
|
||||
exit_reason);
|
||||
gprintk(XENLOG_ERR, "Unexpected nested vmexit: reason %u\n",
|
||||
exit_reason);
|
||||
}
|
||||
|
||||
return ( nvcpu->nv_vmexit_pending == 1 );
|
||||
|
||||