git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kvm: nVMX: Allow L1 to intercept software exceptions (#BP and #OF)
[pandora-kernel.git]
/
arch
/
x86
/
kvm
/
vmx.c
diff --git
a/arch/x86/kvm/vmx.c
b/arch/x86/kvm/vmx.c
index
bd0ed47
..
0fb33a0
100644
(file)
--- a/
arch/x86/kvm/vmx.c
+++ b/
arch/x86/kvm/vmx.c
@@
-876,10
+876,10
@@
static inline bool nested_cpu_has_virtual_nmis(struct vmcs12 *vmcs12,
return vmcs12->pin_based_vm_exec_control & PIN_BASED_VIRTUAL_NMIS;
}
return vmcs12->pin_based_vm_exec_control & PIN_BASED_VIRTUAL_NMIS;
}
-static inline bool is_
exception
(u32 intr_info)
+static inline bool is_
nmi
(u32 intr_info)
{
return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK))
{
return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK))
- == (INTR_TYPE_
HARD_EXCEPTION
| INTR_INFO_VALID_MASK);
+ == (INTR_TYPE_
NMI_INTR
| INTR_INFO_VALID_MASK);
}
static void nested_vmx_vmexit(struct kvm_vcpu *vcpu);
}
static void nested_vmx_vmexit(struct kvm_vcpu *vcpu);
@@
-4225,7
+4225,7
@@
static int handle_exception(struct kvm_vcpu *vcpu)
return 0;
}
return 0;
}
- if (
(intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR
)
+ if (
is_nmi(intr_info)
)
return 1; /* already handled by vmx_vcpu_run() */
if (is_no_device(intr_info)) {
return 1; /* already handled by vmx_vcpu_run() */
if (is_no_device(intr_info)) {
@@
-5773,7
+5773,7
@@
static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)
switch (exit_reason) {
case EXIT_REASON_EXCEPTION_NMI:
switch (exit_reason) {
case EXIT_REASON_EXCEPTION_NMI:
- if (
!is_exception
(intr_info))
+ if (
is_nmi
(intr_info))
return 0;
else if (is_page_fault(intr_info))
return enable_ept;
return 0;
else if (is_page_fault(intr_info))
return enable_ept;
@@
-5973,8
+5973,7
@@
static void vmx_complete_atomic_exit(struct vcpu_vmx *vmx)
kvm_machine_check();
/* We need to handle NMIs before interrupts are enabled */
kvm_machine_check();
/* We need to handle NMIs before interrupts are enabled */
- if ((exit_intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR &&
- (exit_intr_info & INTR_INFO_VALID_MASK)) {
+ if (is_nmi(exit_intr_info)) {
kvm_before_handle_nmi(&vmx->vcpu);
asm("int $2");
kvm_after_handle_nmi(&vmx->vcpu);
kvm_before_handle_nmi(&vmx->vcpu);
asm("int $2");
kvm_after_handle_nmi(&vmx->vcpu);