diff options
Diffstat (limited to 'arch/x86/include/asm/rwsem.h')
| -rw-r--r-- | arch/x86/include/asm/rwsem.h | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/arch/x86/include/asm/rwsem.h b/arch/x86/include/asm/rwsem.h index df4cd32b4cc6..2dbe4a721ce5 100644 --- a/arch/x86/include/asm/rwsem.h +++ b/arch/x86/include/asm/rwsem.h | |||
| @@ -204,13 +204,7 @@ static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem) | |||
| 204 | */ | 204 | */ |
| 205 | static inline long rwsem_atomic_update(long delta, struct rw_semaphore *sem) | 205 | static inline long rwsem_atomic_update(long delta, struct rw_semaphore *sem) |
| 206 | { | 206 | { |
| 207 | long tmp = delta; | 207 | return delta + xadd(&sem->count, delta); |
| 208 | |||
| 209 | asm volatile(LOCK_PREFIX "xadd %0,%1" | ||
| 210 | : "+r" (tmp), "+m" (sem->count) | ||
| 211 | : : "memory"); | ||
| 212 | |||
| 213 | return tmp + delta; | ||
| 214 | } | 208 | } |
| 215 | 209 | ||
| 216 | #endif /* __KERNEL__ */ | 210 | #endif /* __KERNEL__ */ |
