From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Egger Subject: [PATCH] nestedsvm: fix error path when VMRUN emulation fails Date: Tue, 10 May 2011 11:05:04 +0200 Message-ID: <4DC8FFC0.6030609@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010809080108070205080304" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --------------010809080108070205080304 Content-Type: text/plain; charset="ISO-8859-15"; format=flowed Content-Transfer-Encoding: 7bit Hi, attached patch fixes error path when VMRUN emulation fails. With this l1 guest keeps alive rather crashing the host. 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, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 --------------010809080108070205080304 Content-Type: text/plain; name="xen_nh_errorpath.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen_nh_errorpath.diff" Content-Description: xen_nh_errorpath.diff diff -r f3766f97b786 xen/arch/x86/hvm/svm/nestedsvm.c --- a/xen/arch/x86/hvm/svm/nestedsvm.c Mon May 09 14:29:12 2011 +0200 +++ b/xen/arch/x86/hvm/svm/nestedsvm.c Tue May 10 11:11:10 2011 +0200 @@ -708,17 +708,21 @@ nsvm_vcpu_vmrun(struct vcpu *v, struct c /* save host state */ ret = nsvm_vcpu_vmentry(v, regs, inst_len); + + /* Switch vcpu to guest mode. In the error case + * this ensures the host mode is restored correctly + * and l1 guest keeps alive. */ + nestedhvm_vcpu_enter_guestmode(v); + if (ret) { gdprintk(XENLOG_ERR, "nsvm_vcpu_vmentry failed, injecting #UD\n"); hvm_inject_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE, 0); + /* Must happen after hvm_inject_exception or it doesn't work right. */ nv->nv_vmswitch_in_progress = 0; return 1; } - /* Switch vcpu to guest mode - */ - nestedhvm_vcpu_enter_guestmode(v); nv->nv_vmswitch_in_progress = 0; return 0; } @@ -1381,7 +1385,7 @@ asmlinkage void nsvm_vcpu_switch(struct int ret; ASSERT(!nv->nv_vmexit_pending); ret = nsvm_vcpu_vmrun(v, regs); - if (ret < 0) + if (ret) goto vmexit; ASSERT(nestedhvm_vcpu_in_guestmode(v)); --------------010809080108070205080304 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.xensource.com http://lists.xensource.com/xen-devel --------------010809080108070205080304--