mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
x86/vmx: improvements to vmentry failure handling
Combine the almost identical vm_launch_fail() and vm_resume_fail() into a single vmx_vmentry_failure(). Re-save all GPRs so that domain_crash() prints the real register values, rather than the stack frame of the vmx_vmentry_failure() call. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
1 parent
0900d8b09f
commit
bbcf0b218f
2 files changed
+9
-15
No files matched your search
@@ -101,14 +101,15 @@ UNLIKELY_END(realmode)
|
||||
|
||||
/*.Lvmx_resume:*/
|
||||
VMRESUME
|
||||
sti
|
||||
call vm_resume_fail
|
||||
ud2
|
||||
jmp .Lvmx_vmentry_fail
|
||||
|
||||
.Lvmx_launch:
|
||||
VMLAUNCH
|
||||
|
||||
.Lvmx_vmentry_fail:
|
||||
sti
|
||||
call vm_launch_fail
|
||||
SAVE_ALL
|
||||
call vmx_vmentry_failure
|
||||
ud2
|
||||
|
||||
ENTRY(vmx_asm_do_vmentry)
|
||||
|
||||
@@ -1612,21 +1612,14 @@ void vmx_destroy_vmcs(struct vcpu *v)
|
||||
free_xenheap_page(v->arch.hvm_vmx.msr_bitmap);
|
||||
}
|
||||
|
||||
void vm_launch_fail(void)
|
||||
void vmx_vmentry_failure(void)
|
||||
{
|
||||
struct vcpu *curr = current;
|
||||
unsigned long error;
|
||||
|
||||
__vmread(VM_INSTRUCTION_ERROR, &error);
|
||||
printk("<vm_launch_fail> error code %lx\n", error);
|
||||
domain_crash_synchronous();
|
||||
}
|
||||
|
||||
void vm_resume_fail(void)
|
||||
{
|
||||
unsigned long error;
|
||||
|
||||
__vmread(VM_INSTRUCTION_ERROR, &error);
|
||||
printk("<vm_resume_fail> error code %lx\n", error);
|
||||
gprintk(XENLOG_ERR, "VM%s error: %#lx\n",
|
||||
curr->arch.hvm_vmx.launched ? "RESUME" : "LAUNCH", error);
|
||||
domain_crash_synchronous();
|
||||
}
|
||||
|
||||
|
||||