Simple Mutex
include/sync/mutex_simple.h View source View on GitHubFunctions
Section titled “Functions”mutex_simple_init_chk_full
Section titled “mutex_simple_init_chk_full”void mutex_simple_init_chk_full(
struct mutex_simple *m,
const struct lock_chk_class *class,
enum lock_chk_flags flags
) source mutex_simple_set_chk_flags
Section titled “mutex_simple_set_chk_flags”void mutex_simple_set_chk_flags(
struct mutex_simple *m,
enum lock_chk_flags flags
) source mutex_simple_reinit_chk
Section titled “mutex_simple_reinit_chk”void mutex_simple_reinit_chk(
struct mutex_simple *m,
const struct lock_chk_class *class,
enum lock_chk_flags flags
) source mutex_simple_locked
Section titled “mutex_simple_locked”bool mutex_simple_locked(struct mutex_simple *m) source mutex_simple_get_owner
Section titled “mutex_simple_get_owner”struct thread * mutex_simple_get_owner(struct mutex_simple *m) source mutex_simple_assert_not_held_full
Section titled “mutex_simple_assert_not_held_full”void mutex_simple_assert_not_held_full(
struct mutex_simple *m,
const struct lock_chk_site *site
) source mutex_simple_guard_exit
Section titled “mutex_simple_guard_exit”void mutex_simple_guard_exit(struct mutex_simple **m) source mutex_simple_guard_assume
Section titled “mutex_simple_guard_assume”void mutex_simple_guard_assume(struct mutex_simple *m) source mutex_simple_guard_enter
Section titled “mutex_simple_guard_enter”struct mutex_simple * mutex_simple_guard_enter(struct mutex_simple *m) source mutex_simple_guard_subclass_enter
Section titled “mutex_simple_guard_subclass_enter”struct mutex_simple * mutex_simple_guard_subclass_enter(
struct mutex_simple *m,
enum lock_subclass subclass
) source Variables
Section titled “Variables”waiters
Section titled “waiters”struct thread_wait_header waiters source struct lock_chk_lock chk source Macros
Section titled “Macros”MUTEX_SIMPLE_INIT_CHK
Section titled “MUTEX_SIMPLE_INIT_CHK”#define MUTEX_SIMPLE_INIT_CHK(id_, class_, flags_) source Expansion
#define MUTEX_SIMPLE_INIT_CHK(id_, class_, flags_) \
((struct mutex_simple) { \
.owner = NULL, \
.waiters = \
{ \
.waiters = LIST_HEAD_INIT((id_).waiters.waiters), \
.lock = SPINLOCK_INIT_CHK(NULL, LOCK_UNCHKD), \
}, \
.lock = SPINLOCK_INIT_CHK(NULL, LOCK_UNCHKD), \
.chk = LOCK_CHK_LOCK_VALUE_INIT((class_), (flags_)), \
}) mutex_simple_init_chk
Section titled “mutex_simple_init_chk”#define mutex_simple_init_chk(mtx_, class_, flags_) source Expansion
#define mutex_simple_init_chk(mtx_, class_, flags_) \
mutex_simple_init_chk_full((mtx_), (class_), (flags_)) mutex_simple_init_auto_internal
Section titled “mutex_simple_init_auto_internal”#define mutex_simple_init_auto_internal(mtx_, flags_) source Expansion
#define mutex_simple_init_auto_internal(mtx_, flags_) \
do { \
static const struct lock_chk_class __auto_class = { \
.name = #mtx_, \
.file = __RELFILE__, \
.line = __LINE__, \
}; \
mutex_simple_init_chk_full((mtx_), &__auto_class, (flags_)); \
} while (0) MUTEX_SIMPLE_INIT_CHK
Section titled “MUTEX_SIMPLE_INIT_CHK”#define MUTEX_SIMPLE_INIT_CHK(id_, class_, flags_) source Expansion
#define MUTEX_SIMPLE_INIT_CHK(id_, class_, flags_) \
((struct mutex_simple) { \
.owner = NULL, \
.waiters = \
{ \
.waiters = LIST_HEAD_INIT((id_).waiters.waiters), \
.lock = SPINLOCK_INIT_CHK(NULL, LOCK_UNCHKD), \
}, \
.lock = SPINLOCK_INIT_CHK(NULL, LOCK_UNCHKD), \
}) mutex_simple_init_chk
Section titled “mutex_simple_init_chk”#define mutex_simple_init_chk(mtx_, class_, flags_) source Expansion
#define mutex_simple_init_chk(mtx_, class_, flags_) \
mutex_simple_init_chk_full((mtx_), NULL, LOCK_UNCHKD) mutex_simple_init_auto_internal
Section titled “mutex_simple_init_auto_internal”#define mutex_simple_init_auto_internal(mtx_, flags_) source Expansion
#define mutex_simple_init_auto_internal(mtx_, flags_) \
mutex_simple_init_chk_full((mtx_), NULL, LOCK_UNCHKD) MUTEX_SIMPLE_INIT
Section titled “MUTEX_SIMPLE_INIT”#define MUTEX_SIMPLE_INIT(id_) source Expansion
#define MUTEX_SIMPLE_INIT(id_) \
MUTEX_SIMPLE_INIT_CHK((id_), NULL, LOCK_CHKD_FULL) MUTEX_SIMPLE_DEFINE
Section titled “MUTEX_SIMPLE_DEFINE”#define MUTEX_SIMPLE_DEFINE(id) source Expansion
#define MUTEX_SIMPLE_DEFINE(id) struct mutex_simple id = MUTEX_SIMPLE_INIT(id) MUTEX_SIMPLE_DEFINE_CHK
Section titled “MUTEX_SIMPLE_DEFINE_CHK”#define MUTEX_SIMPLE_DEFINE_CHK(id, class_, flags_) source Expansion
#define MUTEX_SIMPLE_DEFINE_CHK(id, class_, flags_) \
struct mutex_simple id = MUTEX_SIMPLE_INIT_CHK((id), (class_), (flags_)) mutex_simple_init_1
Section titled “mutex_simple_init_1”#define mutex_simple_init_1(mtx_) source Expansion
#define mutex_simple_init_1(mtx_) mutex_simple_init_2(mtx_, LOCK_CHKD_FULL) mutex_simple_init_2
Section titled “mutex_simple_init_2”#define mutex_simple_init_2(mtx_, flags_) source Expansion
#define mutex_simple_init_2(mtx_, flags_) \
mutex_simple_init_auto_internal((mtx_), (flags_)) mutex_simple_init
Section titled “mutex_simple_init”#define mutex_simple_init(...) source Expansion
#define mutex_simple_init(...) PP_CALL(mutex_simple_init, __VA_ARGS__) mutex_simple_lock
Section titled “mutex_simple_lock”#define mutex_simple_lock(m_) source Expansion
#define mutex_simple_lock(m_) mutex_simple_lock_full((m_), LOCK_CHK_SITE_HERE()) mutex_simple_unlock
Section titled “mutex_simple_unlock”#define mutex_simple_unlock(m_) source Expansion
#define mutex_simple_unlock(m_) \
mutex_simple_unlock_full((m_), LOCK_CHK_SITE_HERE()) mutex_simple_lock_subclass
Section titled “mutex_simple_lock_subclass”#define mutex_simple_lock_subclass(m_, subclass_) source Expansion
#define mutex_simple_lock_subclass(m_, subclass_) \
mutex_simple_lock_subclass_full((m_), (subclass_), LOCK_CHK_SITE_HERE()) MUTEX_SIMPLE_ASSERT_HELD
Section titled “MUTEX_SIMPLE_ASSERT_HELD”#define MUTEX_SIMPLE_ASSERT_HELD(m) source Expansion
#define MUTEX_SIMPLE_ASSERT_HELD(m) \
mutex_simple_assert_held_full((m), LOCK_CHK_SITE_HERE()) MUTEX_SIMPLE_ASSERT_NOT_HELD
Section titled “MUTEX_SIMPLE_ASSERT_NOT_HELD”#define MUTEX_SIMPLE_ASSERT_NOT_HELD(m) source Expansion
#define MUTEX_SIMPLE_ASSERT_NOT_HELD(m) \
mutex_simple_assert_not_held_full((m), LOCK_CHK_SITE_HERE()) mutex_simple_guard
Section titled “mutex_simple_guard”#define mutex_simple_guard(m_) source Expansion
#define mutex_simple_guard(m_) \
cc_cleanup(mutex_simple_guard_exit) struct mutex_simple *PP_CONCAT( \
mtx_simple_guard_, __COUNTER__) = \
(mutex_simple_guard_assume(m_), mutex_simple_guard_enter(m_)) mutex_simple_guard_subclass
Section titled “mutex_simple_guard_subclass”#define mutex_simple_guard_subclass(m_, subclass_) source Expansion
#define mutex_simple_guard_subclass(m_, subclass_) \
cc_cleanup(mutex_simple_guard_exit) struct mutex_simple *PP_CONCAT( \
mtx_simple_guard_, __COUNTER__) = \
(mutex_simple_guard_assume(m_), \
mutex_simple_guard_subclass_enter((m_), (subclass_)))