|
|
|
#define LOCK_NAME "ck_cohort"
|
|
|
|
#define LOCK_DEFINE \
|
|
|
|
static ck_spinlock_fas_t global_fas_lock = CK_SPINLOCK_FAS_INITIALIZER; \
|
|
|
|
static ck_spinlock_fas_t local_fas_lock = CK_SPINLOCK_FAS_INITIALIZER; \
|
|
|
|
static void \
|
|
|
|
ck_spinlock_fas_lock_with_context(ck_spinlock_fas_t *lock, void *context) \
|
|
|
|
{ \
|
|
|
|
(void)context; \
|
|
|
|
ck_spinlock_fas_lock(lock); \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
static void \
|
|
|
|
ck_spinlock_fas_unlock_with_context(ck_spinlock_fas_t *lock, void *context) \
|
|
|
|
{ \
|
|
|
|
(void)context; \
|
|
|
|
ck_spinlock_fas_unlock(lock); \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
static bool \
|
|
|
|
ck_spinlock_fas_locked_with_context(ck_spinlock_fas_t *lock, void *context) \
|
|
|
|
{ \
|
|
|
|
(void)context; \
|
|
|
|
return ck_spinlock_fas_locked(lock); \
|
|
|
|
} \
|
|
|
|
CK_COHORT_PROTOTYPE(fas_fas, \
|
|
|
|
ck_spinlock_fas_lock_with_context, ck_spinlock_fas_unlock_with_context, \
|
|
|
|
ck_spinlock_fas_locked_with_context, ck_spinlock_fas_lock_with_context, \
|
|
|
|
ck_spinlock_fas_unlock_with_context, ck_spinlock_fas_locked_with_context) \
|
|
|
|
static CK_COHORT_INSTANCE(fas_fas) CK_CC_CACHELINE cohort = CK_COHORT_INITIALIZER
|
|
|
|
|
|
|
|
|
|
|
|
#define LOCK_INIT CK_COHORT_INIT(fas_fas, &cohort, &global_fas_lock, &local_fas_lock, \
|
|
|
|
CK_COHORT_DEFAULT_LOCAL_PASS_LIMIT)
|
|
|
|
#define LOCK CK_COHORT_LOCK(fas_fas, &cohort, NULL, NULL)
|
|
|
|
#define UNLOCK CK_COHORT_UNLOCK(fas_fas, &cohort, NULL, NULL)
|