#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 #ifdef KVM_BRLOCK_DEBUG #include "kvm/rwsem.h" #define br_read_lock(kvm) down_read(&(kvm)->brlock_sem); #define br_read_unlock(kvm) up_read(&(kvm)->brlock_sem); #define br_write_lock(kvm) down_write(&(kvm)->brlock_sem); #define br_write_unlock(kvm) up_write(&(kvm)->brlock_sem); #else #define br_read_lock(kvm) barrier() #define br_read_unlock(kvm) barrier() #define br_write_lock(kvm) kvm__pause(kvm) #define br_write_unlock(kvm) kvm__continue(kvm) #endif #endif