[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] nestedsvm: fix error path when VMRUN emulation fails
# HG changeset patch # User Christoph Egger <Christoph.Egger@xxxxxxx> # Date 1305187082 -3600 # Node ID b6e8e916ed2827fb1329de0de2e23ee5b6b78662 # Parent 8489494ee490cdf25e4d5132b871216e85c92836 nestedsvm: fix error path when VMRUN emulation fails With this, l1 guest keeps alive rather crashing the host. Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx> Acked-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> --- diff -r 8489494ee490 -r b6e8e916ed28 xen/arch/x86/hvm/svm/nestedsvm.c --- a/xen/arch/x86/hvm/svm/nestedsvm.c Thu May 12 08:57:08 2011 +0100 +++ b/xen/arch/x86/hvm/svm/nestedsvm.c Thu May 12 08:58:02 2011 +0100 @@ -656,17 +656,21 @@ /* 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; } @@ -1329,7 +1333,7 @@ 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)); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |