xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] nestedsvm: fix error path when VMRUN emulation fails
@ 2011-05-10  9:05 Christoph Egger
  0 siblings, 0 replies; only message in thread
From: Christoph Egger @ 2011-05-10  9:05 UTC (permalink / raw)
  To: xen-devel@lists.xensource.com

[-- Attachment #1: Type: text/plain, Size: 445 bytes --]


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 <Christoph.Egger@amd.com>

-- 
---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

[-- Attachment #2: xen_nh_errorpath.diff --]
[-- Type: text/plain, Size: 1278 bytes --]

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));

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-05-10  9:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-10  9:05 [PATCH] nestedsvm: fix error path when VMRUN emulation fails Christoph Egger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).