aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc/atomic.h
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@insightbb.com>2007-02-10 01:26:32 -0500
committerDmitry Torokhov <dtor@insightbb.com>2007-02-10 01:26:32 -0500
commitb22364c8eec89e6b0c081a237f3b6348df87796f (patch)
tree233a923281fb640106465d076997ff511efb6edf /include/asm-powerpc/atomic.h
parent2c8dc071517ec2843869024dc82be2e246f41064 (diff)
parent66efc5a7e3061c3597ac43a8bb1026488d57e66b (diff)
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'include/asm-powerpc/atomic.h')
-rw-r--r--include/asm-powerpc/atomic.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/include/asm-powerpc/atomic.h b/include/asm-powerpc/atomic.h
index 53283e2540b3..f038e33e6d48 100644
--- a/include/asm-powerpc/atomic.h
+++ b/include/asm-powerpc/atomic.h
@@ -207,7 +207,8 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
207 207
208/* 208/*
209 * Atomically test *v and decrement if it is greater than 0. 209 * Atomically test *v and decrement if it is greater than 0.
210 * The function returns the old value of *v minus 1. 210 * The function returns the old value of *v minus 1, even if
211 * the atomic variable, v, was not decremented.
211 */ 212 */
212static __inline__ int atomic_dec_if_positive(atomic_t *v) 213static __inline__ int atomic_dec_if_positive(atomic_t *v)
213{ 214{
@@ -216,14 +217,15 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v)
216 __asm__ __volatile__( 217 __asm__ __volatile__(
217 LWSYNC_ON_SMP 218 LWSYNC_ON_SMP
218"1: lwarx %0,0,%1 # atomic_dec_if_positive\n\ 219"1: lwarx %0,0,%1 # atomic_dec_if_positive\n\
219 addic. %0,%0,-1\n\ 220 cmpwi %0,1\n\
221 addi %0,%0,-1\n\
220 blt- 2f\n" 222 blt- 2f\n"
221 PPC405_ERR77(0,%1) 223 PPC405_ERR77(0,%1)
222" stwcx. %0,0,%1\n\ 224" stwcx. %0,0,%1\n\
223 bne- 1b" 225 bne- 1b"
224 ISYNC_ON_SMP 226 ISYNC_ON_SMP
225 "\n\ 227 "\n\
2262:" : "=&r" (t) 2282:" : "=&b" (t)
227 : "r" (&v->counter) 229 : "r" (&v->counter)
228 : "cc", "memory"); 230 : "cc", "memory");
229 231