From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Subject: Re: [PATCH 3/5] Don't #VMEXIT(INTR) if we still have event_inj waiting Date: Wed, 23 Sep 2009 01:09:13 -0700 Message-ID: References: <1253278832-31803-1-git-send-email-agraf@suse.de> <1253278832-31803-2-git-send-email-agraf@suse.de> <1253278832-31803-3-git-send-email-agraf@suse.de> <1253278832-31803-4-git-send-email-agraf@suse.de> <20090923013923.GD4654@8bytes.org> Mime-Version: 1.0 (iPhone Mail 7A341) Content-Type: text/plain; charset=utf-8; format=flowed delsp=yes Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: "kvm@vger.kernel.org" To: Joerg Roedel Return-path: Received: from cantor.suse.de ([195.135.220.2]:60915 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754123AbZIWIIv convert rfc822-to-8bit (ORCPT ); Wed, 23 Sep 2009 04:08:51 -0400 In-Reply-To: <20090923013923.GD4654@8bytes.org> Sender: kvm-owner@vger.kernel.org List-ID: Am 22.09.2009 um 18:39 schrieb Joerg Roedel : > On Fri, Sep 18, 2009 at 03:00:30PM +0200, Alexander Graf wrote: >> Real hardware would first process the event_inj field and then =20 >> notify the >> host that an interrupt is waiting. > > Does it really? I couldn't find this in the SVM spec. I didn't see it in the spec either, but that's what I saw real =20 hardware do which is supported by the exit_info validity check in svm.c > >> Let's do the same and just not EXIT_INTR if we have an event =20 >> pending for the >> L2 guest. > > Anyway. I think this case is handled good enough with patch 5/5. This > patch, to be complete must also enable single-steping to exit again > after the first instruction of the exception handler has ran to injec= t > the interrupt. But that would make the whole thing rather comp=C4=BAi= cate=20 > d. The NMI injection path has logic for that, but for now it shouldn't =20 hurt - we'll get an interrupt sooner or later. > >> Signed-off-by: Alexander Graf >> --- >> arch/x86/kvm/svm.c | 4 ++++ >> 1 files changed, 4 insertions(+), 0 deletions(-) >> >> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >> index 61efd13..28fcbd0 100644 >> --- a/arch/x86/kvm/svm.c >> +++ b/arch/x86/kvm/svm.c >> @@ -1401,6 +1401,10 @@ static inline int nested_svm_intr(struct =20 >> vcpu_svm *svm) >> if (!(svm->vcpu.arch.hflags & HF_HIF_MASK)) >> return 0; >> >> + /* We can't EXIT_INTR when we still have an event to inject */ >> + if (svm->vmcb->control.event_inj) >> + return 1; >> + >> svm->vmcb->control.exit_code =3D SVM_EXIT_INTR; >> >> if (nested_svm_exit_handled(svm)) { >> --=20 >> 1.6.0.2 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe kvm" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html