3 #ifndef _RISCV_ATOMIC_H
4 #define _RISCV_ATOMIC_H
10 #define disable_irqsave() clear_csr(mstatus, MSTATUS_MIE)
11 #define enable_irqrestore(flags) set_csr(mstatus, (flags) & MSTATUS_MIE)
13 #define atomic_set(v, val) ((v)->counter = (val))
14 #define atomic_read(v) ((v)->counter)
17 # define atomic_add(v, inc) __sync_fetch_and_add(&((v)->counter), inc)
18 # define atomic_swap(v, swp) __sync_lock_test_and_set(&((v)->counter), swp)
19 # define atomic_cas(v, cmp, swp) __sync_val_compare_and_swap(&((v)->counter), \
21 # define atomic_inc(v) atomic_add(v, 1)
22 # define atomic_dec(v) atomic_add(v, -1)
46 v->
counter = (res == cmp ? swp : res);
#define enable_irqrestore(flags)
static int atomic_dec(atomic_t *v)
#define disable_irqsave()
static int atomic_cas(atomic_t *v, int cmp, int swp)
static int atomic_add(atomic_t *v, int inc)
static int atomic_inc(atomic_t *v)
static int atomic_swap(atomic_t *v, int swp)