12 #ifndef __METAL_MUTEX__H__ 13 #error "Include metal/mutex.h instead of metal/linux/mutex.h" 16 #ifndef __METAL_LINUX_MUTEX__H__ 17 #define __METAL_LINUX_MUTEX__H__ 20 #include <sys/syscall.h> 21 #include <linux/futex.h> 23 #include <metal/atomic.h> 37 #define METAL_MUTEX_INIT(m) { ATOMIC_VAR_INIT(0) } 42 #define METAL_MUTEX_DEFINE(m) metal_mutex_t m = METAL_MUTEX_INIT(m) 76 syscall(SYS_futex, &mutex->
v, FUTEX_WAIT, 2, NULL, NULL, 0);
85 syscall(SYS_futex, &mutex->
v, FUTEX_WAKE, 1, NULL, NULL, 0);
static int __metal_mutex_cmpxchg(metal_mutex_t *mutex, int exp, int val)
Definition: mutex.h:44
static void __metal_mutex_init(metal_mutex_t *mutex)
Definition: mutex.h:51
#define atomic_fetch_sub(OBJ, VAL)
Definition: atomic.h:98
static void __metal_mutex_release(metal_mutex_t *mutex)
Definition: mutex.h:81
#define atomic_exchange(OBJ, DES)
Definition: atomic.h:63
static int __metal_mutex_try_acquire(metal_mutex_t *mutex)
Definition: mutex.h:61
static void __metal_mutex_deinit(metal_mutex_t *mutex)
Definition: mutex.h:56
#define atomic_store(OBJ, VAL)
Definition: atomic.h:55
#define atomic_load(OBJ)
Definition: atomic.h:59
struct k_sem metal_mutex_t
Definition: mutex.h:26
static void __metal_mutex_acquire(metal_mutex_t *mutex)
Definition: mutex.h:67
static int __metal_mutex_is_acquired(metal_mutex_t *mutex)
Definition: mutex.h:89
int atomic_int
Definition: atomic.h:24
#define atomic_compare_exchange_strong(OBJ, EXP, DES)
Definition: atomic.h:78