diff options
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 48735936860c..a1216de9ffda 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -5339,6 +5339,15 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu) | |||
5339 | return 0; | 5339 | return 0; |
5340 | } | 5340 | } |
5341 | 5341 | ||
5342 | /* | ||
5343 | * EPT violation happened while executing iret from NMI, | ||
5344 | * "blocked by NMI" bit has to be set before next VM entry. | ||
5345 | * There are errata that may cause this bit to not be set: | ||
5346 | * AAK134, BY25. | ||
5347 | */ | ||
5348 | if (exit_qualification & INTR_INFO_UNBLOCK_NMI) | ||
5349 | vmcs_set_bits(GUEST_INTERRUPTIBILITY_INFO, GUEST_INTR_STATE_NMI); | ||
5350 | |||
5342 | gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS); | 5351 | gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS); |
5343 | trace_kvm_page_fault(gpa, exit_qualification); | 5352 | trace_kvm_page_fault(gpa, exit_qualification); |
5344 | 5353 | ||