X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_barrier.c;h=35efe0fb108536dce8f05d1e5f0796de4988b621;hb=013d95f63ad584b8307ca90a82f8649b0bd7a818;hp=e6f12217124aeb525bb2588ff5ea51af220bc23e;hpb=25aec1d035e5a740d8c1cb936d7633b6bb5751f1;p=palacios.git diff --git a/palacios/src/palacios/vmm_barrier.c b/palacios/src/palacios/vmm_barrier.c index e6f1221..35efe0f 100644 --- a/palacios/src/palacios/vmm_barrier.c +++ b/palacios/src/palacios/vmm_barrier.c @@ -141,6 +141,12 @@ int v3_wait_for_barrier(struct v3_vm_info * vm_info, struct guest_info * local_c int v3_raise_barrier(struct v3_vm_info * vm_info, struct guest_info * local_core) { int ret = 0; + + if ((vm_info->run_state != VM_RUNNING) && + (vm_info->run_state != VM_SIMULATING)) { + return 0; + } + ret = v3_raise_barrier_nowait(vm_info, local_core); if (ret != 0) { @@ -162,6 +168,12 @@ int v3_raise_barrier(struct v3_vm_info * vm_info, struct guest_info * local_core int v3_lower_barrier(struct v3_vm_info * vm_info) { struct v3_barrier * barrier = &(vm_info->barrier); + + if ((vm_info->run_state != VM_RUNNING) && + (vm_info->run_state != VM_SIMULATING)) { + return 0; + } + // Clear the active flag, so cores won't wait barrier->active = 0; @@ -186,7 +198,7 @@ int v3_wait_at_barrier(struct guest_info * core) { return 0; } - V3_Print("Core %d waiting at barrier\n", core->vcpu_id); + V3_Print(core->vm_info, core, "Core %d waiting at barrier\n", core->vcpu_id); /* Barrier has been activated. * Wait here until it's lowered @@ -195,7 +207,7 @@ int v3_wait_at_barrier(struct guest_info * core) { // set cpu bit in barrier bitmap v3_bitmap_set(&(barrier->cpu_map), core->vcpu_id); - V3_Print("Core %d bit set as waiting\n", core->vcpu_id); + V3_Print(core->vm_info, core, "Core %d bit set as waiting\n", core->vcpu_id); // wait for cpu bit to clear while (v3_bitmap_check(&(barrier->cpu_map), core->vcpu_id)) {