Skip to content

Commit

Permalink
KVM: nVMX: Check all exceptions for intercept during delivery to L2
Browse files Browse the repository at this point in the history
All exceptions should be checked for intercept during delivery to L2,
but we check only #PF currently. Drop nested_run_pending while we are
at it since exception cannot be injected during vmentry anyway.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
[Renamed the nested_vmx_check_exception function. - Paolo]
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Gleb Natapov authored and bonzini committed Sep 30, 2013
1 parent 851eb66 commit e011c66
Showing 1 changed file with 4 additions and 8 deletions.
12 changes: 4 additions & 8 deletions arch/x86/kvm/vmx.c
Expand Up @@ -1898,16 +1898,12 @@ static void skip_emulated_instruction(struct kvm_vcpu *vcpu)
/*
* KVM wants to inject page-faults which it got to the guest. This function
* checks whether in a nested guest, we need to inject them to L1 or L2.
* This function assumes it is called with the exit reason in vmcs02 being
* a #PF exception (this is the only case in which KVM injects a #PF when L2
* is running).
*/
static int nested_pf_handled(struct kvm_vcpu *vcpu)
static int nested_vmx_check_exception(struct kvm_vcpu *vcpu, unsigned nr)
{
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);

/* TODO: also check PFEC_MATCH/MASK, not just EB.PF. */
if (!(vmcs12->exception_bitmap & (1u << PF_VECTOR)))
if (!(vmcs12->exception_bitmap & (1u << nr)))
return 0;

nested_vmx_vmexit(vcpu);
Expand All @@ -1921,8 +1917,8 @@ static void vmx_queue_exception(struct kvm_vcpu *vcpu, unsigned nr,
struct vcpu_vmx *vmx = to_vmx(vcpu);
u32 intr_info = nr | INTR_INFO_VALID_MASK;

if (!reinject && nr == PF_VECTOR && is_guest_mode(vcpu) &&
!vmx->nested.nested_run_pending && nested_pf_handled(vcpu))
if (!reinject && is_guest_mode(vcpu) &&
nested_vmx_check_exception(vcpu, nr))
return;

if (has_error_code) {
Expand Down

0 comments on commit e011c66

Please sign in to comment.