mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86 vmx: Add handlers for missing exit_reasons documented by Intel SDM 3B
Signed-off-by: Liu Yuan <yuan.b.liu@intel.com> Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
This commit is contained in:
1 parent
e7187a2e01
commit
8462487d48
2 files changed
+26
No files matched your search
@@ -2331,7 +2331,14 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)
|
||||
case EXIT_REASON_PENDING_VIRT_INTR:
|
||||
case EXIT_REASON_PENDING_VIRT_NMI:
|
||||
case EXIT_REASON_MCE_DURING_VMENTRY:
|
||||
case EXIT_REASON_GETSEC:
|
||||
case EXIT_REASON_ACCESS_GDTR_OR_IDTR:
|
||||
case EXIT_REASON_ACCESS_LDTR_OR_TR:
|
||||
case EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED:
|
||||
case EXIT_REASON_INVEPT:
|
||||
case EXIT_REASON_INVVPID:
|
||||
break;
|
||||
|
||||
default:
|
||||
v->arch.hvm_vmx.vmx_emulate = 1;
|
||||
perfc_incr(realmode_exits);
|
||||
@@ -2582,6 +2589,15 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)
|
||||
case EXIT_REASON_VMWRITE:
|
||||
case EXIT_REASON_VMXOFF:
|
||||
case EXIT_REASON_VMXON:
|
||||
case EXIT_REASON_GETSEC:
|
||||
case EXIT_REASON_INVEPT:
|
||||
case EXIT_REASON_INVVPID:
|
||||
/*
|
||||
* We should never exit on GETSEC because CR4.SMXE is always 0 when
|
||||
* running in guest context, and the CPU checks that before getting
|
||||
* as far as vmexit.
|
||||
*/
|
||||
WARN_ON(exit_reason == EXIT_REASON_GETSEC);
|
||||
vmx_inject_hw_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE);
|
||||
break;
|
||||
|
||||
@@ -2647,6 +2663,10 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)
|
||||
break;
|
||||
}
|
||||
|
||||
case EXIT_REASON_ACCESS_GDTR_OR_IDTR:
|
||||
case EXIT_REASON_ACCESS_LDTR_OR_TR:
|
||||
case EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED:
|
||||
/* fall through */
|
||||
default:
|
||||
exit_and_crash:
|
||||
gdprintk(XENLOG_ERR, "Bad vmexit (reason %x)\n", exit_reason);
|
||||
|
||||
@@ -77,6 +77,7 @@ void vmx_update_debug_state(struct vcpu *v);
|
||||
#define EXIT_REASON_PENDING_VIRT_NMI 8
|
||||
#define EXIT_REASON_TASK_SWITCH 9
|
||||
#define EXIT_REASON_CPUID 10
|
||||
#define EXIT_REASON_GETSEC 11
|
||||
#define EXIT_REASON_HLT 12
|
||||
#define EXIT_REASON_INVD 13
|
||||
#define EXIT_REASON_INVLPG 14
|
||||
@@ -107,9 +108,14 @@ void vmx_update_debug_state(struct vcpu *v);
|
||||
#define EXIT_REASON_MCE_DURING_VMENTRY 41
|
||||
#define EXIT_REASON_TPR_BELOW_THRESHOLD 43
|
||||
#define EXIT_REASON_APIC_ACCESS 44
|
||||
#define EXIT_REASON_ACCESS_GDTR_OR_IDTR 46
|
||||
#define EXIT_REASON_ACCESS_LDTR_OR_TR 47
|
||||
#define EXIT_REASON_EPT_VIOLATION 48
|
||||
#define EXIT_REASON_EPT_MISCONFIG 49
|
||||
#define EXIT_REASON_INVEPT 50
|
||||
#define EXIT_REASON_RDTSCP 51
|
||||
#define EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED 52
|
||||
#define EXIT_REASON_INVVPID 53
|
||||
#define EXIT_REASON_WBINVD 54
|
||||
#define EXIT_REASON_XSETBV 55
|
||||
|
||||
|
||||