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_ */ |
---|