X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_barrier.c;h=614ceca6dd81033d759a198374d3fe0f6f3b1921;hb=e346c0bf2e9d047cbb696cd588a5f695b5aa04ca;hp=1115ce0cfc1658f5eeef4e932ef877e5d12e6a5d;hpb=882a72ee6359eb1f28754827a7e41380f275d148;p=palacios-OLD.git diff --git a/palacios/src/palacios/vmm_barrier.c b/palacios/src/palacios/vmm_barrier.c index 1115ce0..614ceca 100644 --- a/palacios/src/palacios/vmm_barrier.c +++ b/palacios/src/palacios/vmm_barrier.c @@ -19,3 +19,57 @@ #include + + + +int v3_init_barrier(struct v3_barrier * barrier) { + memset(barrier, 0, sizeof(struct v3_barrier)); + v3_lock_init(&(barrier->lock)); + + return 0; +} + + +int v3_activate_barrier(struct guest_info * core, struct v3_barrier * barrier) { + addr_t flag; + int acquired = 0; + + flag = v3_lock_irqsave(barrier->lock); + + if (barrier->active == 0) { + barrier->active = 1; + acquired = 1; + } + + v3_unlock_irqrestore(barrier->lock, flag); + + if (acquired == 0) { + return -1; + } + + + // wait for barrier catch + + + return 0; +} + + + + +int v3_deactivate_barrier(struct v3_barrier * barrier) { + +} + + +int v3_check_barrier(struct guest_info * core, struct v3_barrier * barrier) { + + if (barrier->activated == 0) { + return 0; + } + + // set cpu bit + + // wait for cpu bit to clear + +}