umutex
struct umutex _mutex_static_lock = DEFAULT_UMUTEX;
struct umutex _cond_static_lock = DEFAULT_UMUTEX;
struct umutex _rwlock_static_lock = DEFAULT_UMUTEX;
struct umutex _keytable_lock = DEFAULT_UMUTEX;
struct umutex _thr_event_lock = DEFAULT_UMUTEX;
struct umutex _suspend_all_lock = DEFAULT_UMUTEX;
static struct umutex addr_lock;
static struct umutex free_thread_lock = DEFAULT_UMUTEX;
static struct umutex tcb_lock = DEFAULT_UMUTEX;
static struct umutex thr_malloc_umtx;
struct umutex m_lock;
struct umutex b_lock;
struct umutex s_lock;
struct umutex lock;
extern struct umutex _mutex_static_lock __hidden;
extern struct umutex _cond_static_lock __hidden;
extern struct umutex _rwlock_static_lock __hidden;
extern struct umutex _keytable_lock __hidden;
extern struct umutex _thr_event_lock __hidden;
extern struct umutex _suspend_all_lock __hidden;
struct umutex sc_lock;
struct umutex lock;
static struct umutex spinlock_static_lock = DEFAULT_UMUTEX;
__thr_umutex_timedlock(struct umutex *mtx, uint32_t id,
__thr_umutex_unlock(struct umutex *mtx)
__thr_umutex_trylock(struct umutex *mtx)
__thr_umutex_set_ceiling(struct umutex *mtx, uint32_t ceiling,
_thr_ucond_wait(struct ucond *cv, struct umutex *m,
_thr_umutex_init(struct umutex *mtx)
static const struct umutex default_mtx = DEFAULT_UMUTEX;
__thr_umutex_lock(struct umutex *mtx, uint32_t id)
__thr_umutex_lock_spin(struct umutex *mtx, uint32_t id)
_thr_umutex_lock(struct umutex *mtx, uint32_t id)
_thr_umutex_lock_spin(struct umutex *mtx, uint32_t id)
_thr_umutex_timedlock(struct umutex *mtx, uint32_t id,
_thr_umutex_unlock2(struct umutex *mtx, uint32_t id, int *defer)
_thr_umutex_unlock(struct umutex *mtx, uint32_t id)
int __thr_umutex_lock(struct umutex *mtx, uint32_t id) __hidden;
int __thr_umutex_lock_spin(struct umutex *mtx, uint32_t id) __hidden;
int __thr_umutex_timedlock(struct umutex *mtx, uint32_t id,
int __thr_umutex_unlock(struct umutex *mtx) __hidden;
int __thr_umutex_trylock(struct umutex *mtx) __hidden;
int __thr_umutex_set_ceiling(struct umutex *mtx, uint32_t ceiling,
void _thr_umutex_init(struct umutex *mtx) __hidden;
int _thr_ucond_wait(struct ucond *cv, struct umutex *m,
_thr_umutex_trylock(struct umutex *mtx, uint32_t id)
_thr_umutex_trylock2(struct umutex *mtx, uint32_t id)
do_lock_normal(struct thread *td, struct umutex *m, uint32_t flags,
_Static_assert(sizeof(struct umutex) == sizeof(struct umutex32), "umutex32");
_Static_assert(__offsetof(struct umutex, m_spare[0]) ==
do_unlock_normal(struct thread *td, struct umutex *m, uint32_t flags, bool rb)
do_wake_umutex(struct thread *td, struct umutex *m)
do_wake2_umutex(struct thread *td, struct umutex *m, uint32_t flags)
static int do_unlock_pp(struct thread *td, struct umutex *m, uint32_t flags,
do_lock_pi(struct thread *td, struct umutex *m, uint32_t flags,
do_unlock_pi(struct thread *td, struct umutex *m, uint32_t flags, bool rb)
do_lock_pp(struct thread *td, struct umutex *m, uint32_t flags,
do_unlock_pp(struct thread *td, struct umutex *m, uint32_t flags, bool rb)
do_set_ceiling(struct thread *td, struct umutex *m, uint32_t ceiling,
do_lock_umutex(struct thread *td, struct umutex *m,
do_unlock_umutex(struct thread *td, struct umutex *m, bool rb)
do_cv_wait(struct thread *td, struct ucond *cv, struct umutex *m,
umtx_read_rb_list(struct thread *td, struct umutex *m, uintptr_t *rb_list,
struct umutex m;
return (do_unlock_umutex(td, (struct umutex *)rbp, true));