| 1 | #ifndef _VNET_SPINLOCK_H_ |
|---|
| 2 | #define _VNET_SPINLOCK_H_ |
|---|
| 3 | |
|---|
| 4 | typedef struct atomic_t { |
|---|
| 5 | unsigned val; |
|---|
| 6 | } atomic_t; |
|---|
| 7 | |
|---|
| 8 | int atomic_read(const atomic_t *v); |
|---|
| 9 | int atomic_dec_and_test(atomic_t *v); |
|---|
| 10 | void atomic_inc(atomic_t *v); |
|---|
| 11 | void atomic_set(atomic_t *v, int x); |
|---|
| 12 | |
|---|
| 13 | typedef struct spinlock_t { |
|---|
| 14 | unsigned val; |
|---|
| 15 | } spinlock_t; |
|---|
| 16 | |
|---|
| 17 | #define SPIN_LOCK_UNLOCKED ((struct spinlock_t){}) |
|---|
| 18 | |
|---|
| 19 | void spin_lock_init(spinlock_t *lock); |
|---|
| 20 | |
|---|
| 21 | unsigned long _spin_lock_irqsave(spinlock_t *lock); |
|---|
| 22 | #define spin_lock_irqsave(lock, flags) flags = _spin_lock_irqsave(lock) |
|---|
| 23 | void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags); |
|---|
| 24 | |
|---|
| 25 | typedef struct rwlock_t{ |
|---|
| 26 | unsigned val; |
|---|
| 27 | } rwlock_t; |
|---|
| 28 | |
|---|
| 29 | #define RW_LOCK_UNLOCKED ((struct rwlock_t){}) |
|---|
| 30 | |
|---|
| 31 | unsigned long _read_lock_irqsave(rwlock_t *lock); |
|---|
| 32 | #define read_lock_irqsave(lock, flags) flags = _read_lock_irqsave(lock) |
|---|
| 33 | void read_unlock_irqrestore(rwlock_t *lock, unsigned long flags); |
|---|
| 34 | |
|---|
| 35 | unsigned long _write_lock_irqsave(rwlock_t *lock); |
|---|
| 36 | #define write_lock_irqsave(lock, flags) flags = _write_lock_irqsave(lock) |
|---|
| 37 | void write_unlock_irqrestore(rwlock_t *lock, unsigned long flags); |
|---|
| 38 | |
|---|
| 39 | struct semaphore { |
|---|
| 40 | int count; |
|---|
| 41 | }; |
|---|
| 42 | |
|---|
| 43 | void init_MUTEX(struct semaphore *sem); |
|---|
| 44 | void down(struct semaphore *sem); |
|---|
| 45 | void up(struct semaphore *sem); |
|---|
| 46 | |
|---|
| 47 | #endif /* ! _VNET_SPINLOCK_H_ */ |
|---|