Rev 5347 | Rev 6934 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5347 | Rev 6102 | ||
---|---|---|---|
Line 80... | Line 80... | ||
80 | static inline void up_write(struct rw_semaphore *sem) |
80 | static inline void up_write(struct rw_semaphore *sem) |
81 | { |
81 | { |
82 | UpWrite(sem); |
82 | UpWrite(sem); |
83 | } |
83 | } |
Line -... | Line 84... | ||
- | 84 | ||
- | 85 | #define RWSEM_UNLOCKED_VALUE 0x00000000L |
|
- | 86 | #define RWSEM_ACTIVE_BIAS 0x00000001L |
|
- | 87 | #define RWSEM_WAITING_BIAS (-RWSEM_ACTIVE_MASK-1) |
|
- | 88 | #define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS |
|
- | 89 | #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) |
|
- | 90 | ||
- | 91 | static inline int down_read_trylock(struct rw_semaphore *sem) |
|
- | 92 | { |
|
- | 93 | long result, tmp; |
|
- | 94 | asm volatile("# beginning __down_read_trylock\n\t" |
|
- | 95 | " mov %0,%1\n\t" |
|
- | 96 | "1:\n\t" |
|
- | 97 | " mov %1,%2\n\t" |
|
- | 98 | " add %3,%2\n\t" |
|
- | 99 | " jle 2f\n\t" |
|
- | 100 | LOCK_PREFIX " cmpxchg %2,%0\n\t" |
|
- | 101 | " jnz 1b\n\t" |
|
- | 102 | "2:\n\t" |
|
- | 103 | "# ending __down_read_trylock\n\t" |
|
- | 104 | : "+m" (sem->count), "=&a" (result), "=&r" (tmp) |
|
- | 105 | : "i" (RWSEM_ACTIVE_READ_BIAS) |
|
- | 106 | : "memory", "cc"); |
|
- | 107 | return result >= 0 ? 1 : 0; |
|
- | 108 | } |
|
- | 109 | ||
84 | 110 | ||
85 | #endif /* __KERNEL__ */ |
111 | #endif /* __KERNEL__ */ |