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:
Andrew Cooper authored and Jan Beulich committed 2015-11-03 18:14:02 +01:00
1 parent 0900d8b09f
commit bbcf0b218f
2 files changed
+9 -15

No files matched your search

+5 -4
View File
@@ -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)
+4 -11
View File
@@ -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();
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.