diff --git a/include/kvm/brlock.h b/include/kvm/brlock.h new file mode 100644 index 0000000..2e2e0f8 --- /dev/null +++ b/include/kvm/brlock.h @@ -0,0 +1,25 @@ +#ifndef KVM__BRLOCK_H +#define KVM__BRLOCK_H + +#include "kvm/kvm.h" +#include "kvm/barrier.h" + +/* + * brlock is a lock which is very cheap for reads, but very expensive + * for writes. + * This lock will be used when updates are very rare and reads are common. + * This lock is currently implemented by stopping the guest while + * performing the updates. We assume that the only threads whichread from + * the locked data are VCPU threads, and the only writer isn't a VCPU thread. + */ + +#ifndef barrier +#define barrier() __asm__ __volatile__("": : :"memory") +#endif + +#define br_read_lock() barrier() +#define br_read_unlock() barrier() + +#define br_write_lock() kvm__pause() +#define br_write_unlock() kvm__continue() +#endif