From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: [PATCHv2] SVM: do not generate "external interrupt exit" if other exit is pending Date: Mon, 20 Sep 2010 10:15:32 +0200 Message-ID: <20100920081532.GG3008@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: joerg.roedel@amd.com, agraf@suse.de To: kvm@vger.kernel.org, avi@redhat.com, mtosatti@redhat.com Return-path: Received: from mx1.redhat.com ([209.132.183.28]:33594 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751767Ab0ITIPi (ORCPT ); Mon, 20 Sep 2010 04:15:38 -0400 Content-Disposition: inline Sender: kvm-owner@vger.kernel.org List-ID: Nested SVM checks for external interrupt after injecting nested exception. In case there is external interrupt pending the code generates "external interrupt exit" and overwrites previous exit info. If previously injected exception already generated exit it will be lost. Signed-off-by: Gleb Natapov --- v1->v2 - Added comment diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 43f5558..ca778d5 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -1707,6 +1707,14 @@ static inline bool nested_svm_intr(struct vcpu_svm *svm) if (!(svm->vcpu.arch.hflags & HF_HIF_MASK)) return false; + /* + * if vmexit was already requested (by intercepted exception + * for instance) do not overwrite it with "external interrupt" + * vmexit. + */ + if (svm->nested.exit_required) + return false; + svm->vmcb->control.exit_code = SVM_EXIT_INTR; svm->vmcb->control.exit_info_1 = 0; svm->vmcb->control.exit_info_2 = 0; -- Gleb.