From: Jack Lange Date: Fri, 10 Feb 2012 23:46:59 +0000 (-0500) Subject: fixes to allow stopping a paused guest X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=ee8feefed3a69f8145b896ac527c4d227516c411;p=palacios.git fixes to allow stopping a paused guest --- diff --git a/palacios/src/palacios/vmm.c b/palacios/src/palacios/vmm.c index 48df285..d2d01fb 100644 --- a/palacios/src/palacios/vmm.c +++ b/palacios/src/palacios/vmm.c @@ -452,6 +452,11 @@ int v3_stop_vm(struct v3_vm_info * vm) { vm->run_state = VM_STOPPED; + // Sanity check to catch any weird execution states + if (v3_wait_for_barrier(vm, NULL) == 0) { + v3_lower_barrier(vm); + } + // XXX force exit all cores via a cross call/IPI XXX while (1) { diff --git a/palacios/src/palacios/vmm_barrier.c b/palacios/src/palacios/vmm_barrier.c index f887a05..961b894 100644 --- a/palacios/src/palacios/vmm_barrier.c +++ b/palacios/src/palacios/vmm_barrier.c @@ -93,6 +93,10 @@ int v3_wait_for_barrier(struct v3_vm_info * vm_info, struct guest_info * local_c int all_blocked = 0; int i = 0; + if (barrier->active == 0) { + return -1; + } + // wait for barrier catch on all cores while (all_blocked == 0) { all_blocked = 1;