patch-2.4.0-test9 linux/arch/sparc64/lib/rwlock.S
Next file: linux/arch/sparc64/mm/fault.c
Previous file: linux/arch/sparc64/kernel/time.c
Back to the patch index
Back to the overall index
- Lines: 76
- Date:
Fri Sep 8 17:55:17 2000
- Orig file:
v2.4.0-test8/linux/arch/sparc64/lib/rwlock.S
- Orig date:
Thu Mar 16 11:40:17 2000
diff -u --recursive --new-file v2.4.0-test8/linux/arch/sparc64/lib/rwlock.S linux/arch/sparc64/lib/rwlock.S
@@ -1,4 +1,4 @@
-/* $Id: rwlock.S,v 1.3 2000/03/16 16:44:38 davem Exp $
+/* $Id: rwlock.S,v 1.4 2000/09/09 00:00:34 davem Exp $
* rwlocks.S: These things are too big to do inline.
*
* Copyright (C) 1999 David S. Miller (davem@redhat.com)
@@ -30,54 +30,38 @@
cmp %g5, %g7
be,pt %xcc, 99b
membar #StoreLoad | #StoreStore
- b,a,pt %xcc, __read_unlock
+ ba,a,pt %xcc, __read_unlock
__read_wait_for_writer:
ldsw [%o0], %g5
brlz,pt %g5, __read_wait_for_writer
membar #LoadLoad
- b,a,pt %xcc, 4b
-__write_wait_for_writer:
- ldsw [%o0], %g5
- brlz,pt %g5, __write_wait_for_writer
+ ba,a,pt %xcc, 4b
+__write_wait_for_any:
+ lduw [%o0], %g5
+ brnz,pt %g5, __write_wait_for_any
membar #LoadLoad
- b,a,pt %xcc, 4f
-
- /* Similarly, 2 cache lines for non-contention write locks. */
+ ba,a,pt %xcc, 4f
.align 64
.globl __write_unlock
__write_unlock: /* %o0 = lock_ptr */
- sethi %hi(0x80000000), %g2
-1: lduw [%o0], %g5
- andn %g5, %g2, %g7
- cas [%o0], %g5, %g7
- cmp %g5, %g7
- be,pt %icc, 99b
- membar #StoreLoad | #StoreStore
- b,a,pt %xcc, 1b
+ membar #LoadStore | #StoreStore
+ retl
+ stw %g0, [%o0]
.globl __write_lock
__write_lock: /* %o0 = lock_ptr */
sethi %hi(0x80000000), %g2
-1: ldsw [%o0], %g5
-4: brnz,pn %g5, 5f
- or %g5, %g2, %g7
+
+1: lduw [%o0], %g5
+ brnz,pn %g5, __write_wait_for_any
+4: or %g5, %g2, %g7
cas [%o0], %g5, %g7
+
cmp %g5, %g7
be,pt %icc, 99b
membar #StoreLoad | #StoreStore
-
- b,a,pt %xcc, 1b
-5: brlz %g5, __write_wait_for_writer
- or %g5, %g2, %g7
- cas [%o0], %g5, %g7
- cmp %g5, %g7
- bne,pn %icc, 5b
-8: ldsw [%o0], %g5
- cmp %g5, %g2
- be,pn %icc, 99b
- membar #LoadLoad
- b,a,pt %xcc, 99b
+ ba,a,pt %xcc, 1b
rwlock_impl_end:
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)