diff options
Diffstat (limited to 'pk/atomic.h')
-rw-r--r-- | pk/atomic.h | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/pk/atomic.h b/pk/atomic.h deleted file mode 100644 index 88bb239..0000000 --- a/pk/atomic.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef _RISCV_ATOMIC_H -#define _RISCV_ATOMIC_H - -typedef struct { long val; } atomic_t; -typedef struct { atomic_t lock; } spinlock_t; -#define SPINLOCK_INIT {{0}} - -static inline long atomic_add(atomic_t* a, long inc) -{ - //return __sync_fetch_and_add(&a->val, inc); - long ret = a->val; - a->val++; - return ret; -} - -static inline long atomic_swap(atomic_t* a, long val) -{ - //return __sync_lock_test_and_set(&a->val, val); - long reg = a->val; - a->val = val; - return reg; -} - -static inline void atomic_set(atomic_t* a, long val) -{ - a->val = val; -} - -static inline long atomic_read(atomic_t* a) -{ - return a->val; -} - -static inline void spinlock_lock(spinlock_t* lock) -{ - while(atomic_read(&lock->lock)) - while(atomic_swap(&lock->lock,-1)); -} - -static inline void spinlock_unlock(spinlock_t* lock) -{ - atomic_set(&lock->lock,0); -} - -#endif |