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)
77 syscall(SYS_futex, &mutex->
v, FUTEX_WAIT, 2, NULL, NULL, 0);
86 syscall(SYS_futex, &mutex->
v, FUTEX_WAKE, 1, NULL, NULL, 0);
#define atomic_load(OBJ)
Definition: atomic.h:60
int atomic_int
Definition: atomic.h:24
#define atomic_compare_exchange_strong(OBJ, EXP, DES)
Definition: atomic.h:79
#define atomic_store(OBJ, VAL)
Definition: atomic.h:56
#define atomic_exchange(OBJ, DES)
Definition: atomic.h:64
#define atomic_fetch_sub(OBJ, VAL)
Definition: atomic.h:99
static void __metal_mutex_release(metal_mutex_t *mutex)
Definition: mutex.h:79
static void __metal_mutex_deinit(metal_mutex_t *mutex)
Definition: mutex.h:60
static int __metal_mutex_try_acquire(metal_mutex_t *mutex)
Definition: mutex.h:67
static int __metal_mutex_is_acquired(metal_mutex_t *mutex)
Definition: mutex.h:85
static void __metal_mutex_acquire(metal_mutex_t *mutex)
Definition: mutex.h:73
static void __metal_mutex_init(metal_mutex_t *mutex)
Definition: mutex.h:53
static int __metal_mutex_cmpxchg(metal_mutex_t *mutex, int exp, int val)
Definition: mutex.h:44