Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / sparc64 / kernel / semaphore.c
index 63496c4..a809e63 100644 (file)
@@ -32,8 +32,9 @@ static __inline__ int __sem_update_count(struct semaphore *sem, int incr)
 "      add     %1, %4, %1\n"
 "      cas     [%3], %0, %1\n"
 "      cmp     %0, %1\n"
+"      membar  #StoreLoad | #StoreStore\n"
 "      bne,pn  %%icc, 1b\n"
-"       membar #StoreLoad | #StoreStore\n"
+"       nop\n"
        : "=&r" (old_count), "=&r" (tmp), "=m" (sem->count)
        : "r" (&sem->count), "r" (incr), "m" (sem->count)
        : "cc");
@@ -71,8 +72,9 @@ void up(struct semaphore *sem)
 "      cmp     %%g1, %%g7\n"
 "      bne,pn  %%icc, 1b\n"
 "       addcc  %%g7, 1, %%g0\n"
+"      membar  #StoreLoad | #StoreStore\n"
 "      ble,pn  %%icc, 3f\n"
-"       membar #StoreLoad | #StoreStore\n"
+"       nop\n"
 "2:\n"
 "      .subsection 2\n"
 "3:    mov     %0, %%g1\n"
@@ -128,8 +130,9 @@ void __sched down(struct semaphore *sem)
 "      cmp     %%g1, %%g7\n"
 "      bne,pn  %%icc, 1b\n"
 "       cmp    %%g7, 1\n"
+"      membar  #StoreLoad | #StoreStore\n"
 "      bl,pn   %%icc, 3f\n"
-"       membar #StoreLoad | #StoreStore\n"
+"       nop\n"
 "2:\n"
 "      .subsection 2\n"
 "3:    mov     %0, %%g1\n"
@@ -233,8 +236,9 @@ int __sched down_interruptible(struct semaphore *sem)
 "      cmp     %%g1, %%g7\n"
 "      bne,pn  %%icc, 1b\n"
 "       cmp    %%g7, 1\n"
+"      membar  #StoreLoad | #StoreStore\n"
 "      bl,pn   %%icc, 3f\n"
-"       membar #StoreLoad | #StoreStore\n"
+"       nop\n"
 "2:\n"
 "      .subsection 2\n"
 "3:    mov     %2, %%g1\n"