2016-12-19 17:17+0100, Paolo Bonzini: > vcpu_run calls kvm_vcpu_running, not kvm_arch_vcpu_runnable, > and the former does not call check_nested_events. > > Once KVM_REQ_EVENT is removed from the APICv interrupt injection > path, however, this would leave no place to trigger a vmexit > from L2 to L1, causing a missed interrupt delivery while in guest > mode. This is caught by the "ack interrupt on exit" test in > vmx.flat. > > [This does not change the calls to check_nested_events in > inject_pending_event. That is material for a separate cleanup.] > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- I think we should now remove the call to check_nested_events() from inject_pending_event() and we could also call it in vcpu_enter_guest() directly. Still, Reviewed-by: Radim Krčmář <rkrcmar@xxxxxxxxxx > arch/x86/kvm/x86.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index d5a5fc2f8758..32e5f54a8eba 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -6920,6 +6920,9 @@ static inline int vcpu_block(struct kvm *kvm, struct kvm_vcpu *vcpu) > > static inline bool kvm_vcpu_running(struct kvm_vcpu *vcpu) > { > + if (is_guest_mode(vcpu) && kvm_x86_ops->check_nested_events) > + kvm_x86_ops->check_nested_events(vcpu, false); > + > return (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE && > !vcpu->arch.apf.halted); > } > @@ -8286,9 +8289,6 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu) > > int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) > { > - if (is_guest_mode(vcpu) && kvm_x86_ops->check_nested_events) > - kvm_x86_ops->check_nested_events(vcpu, false); > - > return kvm_vcpu_running(vcpu) || kvm_vcpu_has_events(vcpu); > } > > -- > 1.8.3.1 > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html