|  | #ifndef _LOWLEVELLOCK_H | 
|  | #define _LOWLEVELLOCK_H | 
|  |  | 
|  | #include <atomic.h> | 
|  | #include <sys/param.h> | 
|  | #include <parlib/spinlock.h> | 
|  |  | 
|  | /* Akaros doesn't support private vs shared locks.  That's probably a problem */ | 
|  | #define LLL_PRIVATE 0 | 
|  | #define LLL_SHARED 1 | 
|  |  | 
|  | /* Glibc's locking is a nightmare, and in lieu of rewriting that mess (see | 
|  | * libc-lock.h) to support something other than an integer for the LLL lock | 
|  | * (and thus the libc lock, and the libc recursive lock, etc), we'll just use | 
|  | * an int for storage and cast that to a struct spin_pdr_lock, which happens to | 
|  | * also be 32 bits.  FFS. */ | 
|  | #define LLL_LOCK_INITIALIZER SPINPDR_UNLOCKED | 
|  |  | 
|  | #define lll_lock(l, p) spin_pdr_lock((struct spin_pdr_lock*)&(l)) | 
|  | #define lll_unlock(l, p) spin_pdr_unlock((struct spin_pdr_lock*)&(l)) | 
|  | /* lll_trylock returns 0 on success.  spin_pdr_trylock returns TRUE on | 
|  | * success. */ | 
|  | #define lll_trylock(l) !spin_pdr_trylock((struct spin_pdr_lock*)&l) | 
|  |  | 
|  | #define lll_futex_wait(m,v,p) do { assert("NO FUTEX_WAIT FOR YOU!" == 0); } while(0) | 
|  | #define lll_futex_wake(m,n,p) do { assert("NO FUTEX_WAKE FOR YOU!" == 0); } while(0) | 
|  |  | 
|  | #endif |