From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Egger Subject: [PATCH] nestedsvm: fix interrupt handling Date: Fri, 31 Aug 2012 11:16:53 +0200 Message-ID: <50408105.3020502@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060908090801080904070009" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org --------------060908090801080904070009 Content-Type: text/plain; charset="ISO-8859-15" Content-Transfer-Encoding: 7bit Give the l2 guest a chance to finish the delivery of the last injected interrupt or exception before we emulate a VMEXIT. For example after a NPF handled by the host there can be an interrupt for the l1 guest. Signed-off-by: Christoph Egger -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 --------------060908090801080904070009 Content-Type: text/plain; charset="us-ascii"; name="xen_nh_intr.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen_nh_intr.diff" Content-Description: xen_nh_intr.diff diff -r a0b5f8102a00 xen/arch/x86/hvm/svm/nestedsvm.c --- a/xen/arch/x86/hvm/svm/nestedsvm.c Tue Aug 28 22:40:45 2012 +0100 +++ b/xen/arch/x86/hvm/svm/nestedsvm.c Fri Aug 31 11:09:37 2012 +0200 @@ -1164,6 +1164,8 @@ enum hvm_intblk nsvm_intr_blocked(struct return hvm_intblk_svm_gif; if ( nestedhvm_vcpu_in_guestmode(v) ) { + struct vmcb_struct *n2vmcb = nv->nv_n2vmcx; + if ( svm->ns_hostflags.fields.vintrmask ) if ( !svm->ns_hostflags.fields.rflagsif ) return hvm_intblk_rflags_ie; @@ -1176,6 +1178,14 @@ enum hvm_intblk nsvm_intr_blocked(struct */ if ( v->arch.hvm_vcpu.hvm_io.io_state != HVMIO_none ) return hvm_intblk_shadow; + + if ( !nv->nv_vmexit_pending && n2vmcb->exitintinfo.bytes != 0 ) { + /* Give the l2 guest a chance to finish the delivery of + * the last injected interrupt or exception before we + * emulate a VMEXIT (e.g. VMEXIT(INTR) ). + */ + return hvm_intblk_shadow; + } } if ( nv->nv_vmexit_pending ) { --------------060908090801080904070009 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --------------060908090801080904070009--