ChangeSet 1.2181.24.6, 2005/03/24 17:59:43-08:00, [EMAIL PROTECTED]

        [SPARC64]: Move rwsem helpers into asm file.
        
        They were all purely inline asm statements anyways.
        
        Signed-off-by: David S. Miller <[EMAIL PROTECTED]>



 arch/sparc64/lib/rwsem.c              |  222 ----------------------------------
 b/arch/sparc64/kernel/sparc64_ksyms.c |   10 +
 b/arch/sparc64/lib/rwsem.S            |  165 +++++++++++++++++++++++++
 b/include/asm-sparc64/rwsem-const.h   |   12 +
 b/include/asm-sparc64/rwsem.h         |    7 -
 5 files changed, 188 insertions(+), 228 deletions(-)


diff -Nru a/arch/sparc64/kernel/sparc64_ksyms.c 
b/arch/sparc64/kernel/sparc64_ksyms.c
--- a/arch/sparc64/kernel/sparc64_ksyms.c       2005-04-03 21:12:20 -07:00
+++ b/arch/sparc64/kernel/sparc64_ksyms.c       2005-04-03 21:12:20 -07:00
@@ -59,6 +59,7 @@
 #include <asm/ns87303.h>
 #include <asm/timer.h>
 #include <asm/cpudata.h>
+#include <asm/rwsem.h>
 
 struct poll {
        int fd;
@@ -170,6 +171,15 @@
 EXPORT_SYMBOL(down_trylock);
 EXPORT_SYMBOL(down_interruptible);
 EXPORT_SYMBOL(up);
+
+/* RW semaphores */
+EXPORT_SYMBOL(__down_read);
+EXPORT_SYMBOL(__down_read_trylock);
+EXPORT_SYMBOL(__down_write);
+EXPORT_SYMBOL(__down_write_trylock);
+EXPORT_SYMBOL(__up_read);
+EXPORT_SYMBOL(__up_write);
+EXPORT_SYMBOL(__downgrade_write);
 
 /* Atomic counter implementation. */
 EXPORT_SYMBOL(atomic_add);
diff -Nru a/arch/sparc64/lib/rwsem.S b/arch/sparc64/lib/rwsem.S
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/arch/sparc64/lib/rwsem.S  2005-04-03 21:12:20 -07:00
@@ -0,0 +1,165 @@
+/* rwsem.S: RW semaphore assembler.
+ *
+ * Written by David S. Miller ([email protected]), 2001.
+ * Derived from asm-i386/rwsem.h
+ */
+
+#include <asm/rwsem-const.h>
+
+       .section        .sched.text
+
+       .globl          __down_read
+__down_read:
+1:     lduw            [%o0], %g1
+       add             %g1, 1, %g7
+       cas             [%o0], %g1, %g7
+       cmp             %g1, %g7
+       bne,pn          %icc, 1b
+        add            %g7, 1, %g7
+       cmp             %g7, 0
+       bl,pn           %icc, 3f
+        membar         #StoreLoad | #StoreStore
+2:
+       retl
+        nop
+3:
+       save            %sp, -192, %sp
+       call            rwsem_down_read_failed
+        mov            %i0, %o0
+       ret
+        restore
+       .size           __down_read, .-__down_read
+
+       .globl          __down_read_trylock
+__down_read_trylock:
+1:     lduw            [%o0], %g1
+       add             %g1, 1, %g7
+       cmp             %g7, 0
+       bl,pn           %icc, 2f
+        mov            0, %o1
+       cas             [%o0], %g1, %g7
+       cmp             %g1, %g7
+       bne,pn          %icc, 1b
+        mov            1, %o1
+       membar          #StoreLoad | #StoreStore
+2:     retl
+        mov            %o1, %o0
+       .size           __down_read_trylock, .-__down_read_trylock
+
+       .globl          __down_write
+__down_write:
+       sethi           %hi(RWSEM_ACTIVE_WRITE_BIAS), %g1
+       or              %g1, %lo(RWSEM_ACTIVE_WRITE_BIAS), %g1
+1:
+       lduw            [%o0], %g3
+       add             %g3, %g1, %g7
+       cas             [%o0], %g3, %g7
+       cmp             %g3, %g7
+       bne,pn          %icc, 1b
+        cmp            %g7, 0
+       bne,pn          %icc, 3f
+        membar         #StoreLoad | #StoreStore
+2:     retl
+        nop
+3:
+       save            %sp, -192, %sp
+       call            rwsem_down_write_failed
+        mov            %i0, %o0
+       ret
+        restore
+       .size           __down_write, .-__down_write
+
+       .globl          __down_write_trylock
+__down_write_trylock:
+       sethi           %hi(RWSEM_ACTIVE_WRITE_BIAS), %g1
+       or              %g1, %lo(RWSEM_ACTIVE_WRITE_BIAS), %g1
+1:
+       lduw            [%o0], %g3
+       cmp             %g3, 0
+       bne,pn          %icc, 2f
+        mov            0, %o1
+       add             %g3, %g1, %g7
+       cas             [%o0], %g3, %g7
+       cmp             %g3, %g7
+       bne,pn          %icc, 1b
+        mov            1, %o1
+       membar          #StoreLoad | #StoreStore
+2:     retl
+        mov            %o1, %o0
+       .size           __down_write_trylock, .-__down_write_trylock
+
+       .globl          __up_read
+__up_read:
+1:
+       lduw            [%o0], %g1
+       sub             %g1, 1, %g7
+       cas             [%o0], %g1, %g7
+       cmp             %g1, %g7
+       bne,pn          %icc, 1b
+        cmp            %g7, 0
+       bl,pn           %icc, 3f
+        membar         #StoreLoad | #StoreStore
+2:     retl
+        nop
+3:     sethi           %hi(RWSEM_ACTIVE_MASK), %g1
+       sub             %g7, 1, %g7
+       or              %g1, %lo(RWSEM_ACTIVE_MASK), %g1
+       andcc           %g7, %g1, %g0
+       bne,pn          %icc, 2b
+        nop
+       save            %sp, -192, %sp
+       call            rwsem_wake
+        mov            %i0, %o0
+       ret
+        restore
+       .size           __up_read, .-__up_read
+
+       .globl          __up_write
+__up_write:
+       sethi           %hi(RWSEM_ACTIVE_WRITE_BIAS), %g1
+       or              %g1, %lo(RWSEM_ACTIVE_WRITE_BIAS), %g1
+1:
+       lduw            [%o0], %g3
+       sub             %g3, %g1, %g7
+       cas             [%o0], %g3, %g7
+       cmp             %g3, %g7
+       bne,pn          %icc, 1b
+        sub            %g7, %g1, %g7
+       cmp             %g7, 0
+       bl,pn           %icc, 3f
+        membar         #StoreLoad | #StoreStore
+2:
+       retl
+        nop
+3:
+       save            %sp, -192, %sp
+       call            rwsem_wake
+        mov            %i0, %o0
+       ret
+        restore
+       .size           __up_write, .-__up_write
+
+       .globl          __downgrade_write
+__downgrade_write:
+       sethi           %hi(RWSEM_WAITING_BIAS), %g1
+       or              %g1, %lo(RWSEM_WAITING_BIAS), %g1
+1:
+       lduw            [%o0], %g3
+       sub             %g3, %g1, %g7
+       cas             [%o0], %g3, %g7
+       cmp             %g3, %g7
+       bne,pn          %icc, 1b
+        sub            %g7, %g1, %g7
+       cmp             %g7, 0
+       bl,pn           %icc, 3f
+        membar         #StoreLoad | #StoreStore
+2:
+       retl
+        nop
+3:
+       save            %sp, -192, %sp
+       call            rwsem_downgrade_wake
+        mov            %i0, %o0
+       ret
+        restore
+       .size           __downgrade_write, .-__downgrade_write
diff -Nru a/arch/sparc64/lib/rwsem.c b/arch/sparc64/lib/rwsem.c
--- a/arch/sparc64/lib/rwsem.c  2005-04-03 21:12:20 -07:00
+++ /dev/null   Wed Dec 31 16:00:00 196900
@@ -1,222 +0,0 @@
-/* rwsem.c: Don't inline expand these suckers all over the place.
- *
- * Written by David S. Miller ([email protected]), 2001.
- * Derived from asm-i386/rwsem.h
- */
-
-#include <linux/kernel.h>
-#include <linux/rwsem.h>
-#include <linux/init.h>
-#include <linux/module.h>
-
-extern struct rw_semaphore *FASTCALL(rwsem_down_read_failed(struct 
rw_semaphore *sem));
-extern struct rw_semaphore *FASTCALL(rwsem_down_write_failed(struct 
rw_semaphore *sem));
-extern struct rw_semaphore *FASTCALL(rwsem_wake(struct rw_semaphore *));
-extern struct rw_semaphore *FASTCALL(rwsem_downgrade_wake(struct rw_semaphore 
*));
-
-void __sched __down_read(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "! beginning __down_read\n"
-               "1:\tlduw       [%0], %%g1\n\t"
-               "add            %%g1, 1, %%g7\n\t"
-               "cas            [%0], %%g1, %%g7\n\t"
-               "cmp            %%g1, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " add           %%g7, 1, %%g7\n\t"
-               "cmp            %%g7, 0\n\t"
-               "bl,pn          %%icc, 3f\n\t"
-               " membar        #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               ".subsection    2\n"
-               "3:\tmov        %0, %%g1\n\t"
-               "save           %%sp, -160, %%sp\n\t"
-               "call           %1\n\t"
-               " mov           %%g1, %%o0\n\t"
-               "ba,pt          %%xcc, 2b\n\t"
-               " restore\n\t"
-               ".previous\n\t"
-               "! ending __down_read"
-               : : "r" (sem), "i" (rwsem_down_read_failed)
-               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
-}
-EXPORT_SYMBOL(__down_read);
-
-int __down_read_trylock(struct rw_semaphore *sem)
-{
-       int result;
-
-       __asm__ __volatile__(
-               "! beginning __down_read_trylock\n"
-               "1:\tlduw       [%1], %%g1\n\t"
-               "add            %%g1, 1, %%g7\n\t"
-               "cmp            %%g7, 0\n\t"
-               "bl,pn          %%icc, 2f\n\t"
-               " mov           0, %0\n\t"
-               "cas            [%1], %%g1, %%g7\n\t"
-               "cmp            %%g1, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " mov           1, %0\n\t"
-               "membar         #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               "! ending __down_read_trylock"
-               : "=&r" (result)
-                : "r" (sem)
-               : "g1", "g7", "memory", "cc");
-
-       return result;
-}
-EXPORT_SYMBOL(__down_read_trylock);
-
-void __sched __down_write(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "! beginning __down_write\n\t"
-               "sethi          %%hi(%2), %%g1\n\t"
-               "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%0], %%g3\n\t"
-               "add            %%g3, %%g1, %%g7\n\t"
-               "cas            [%0], %%g3, %%g7\n\t"
-               "cmp            %%g3, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " cmp           %%g7, 0\n\t"
-               "bne,pn         %%icc, 3f\n\t"
-               " membar        #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               ".subsection    2\n"
-               "3:\tmov        %0, %%g1\n\t"
-               "save           %%sp, -160, %%sp\n\t"
-               "call           %1\n\t"
-               " mov           %%g1, %%o0\n\t"
-               "ba,pt          %%xcc, 2b\n\t"
-               " restore\n\t"
-               ".previous\n\t"
-               "! ending __down_write"
-               : : "r" (sem), "i" (rwsem_down_write_failed),
-                   "i" (RWSEM_ACTIVE_WRITE_BIAS)
-               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
-}
-EXPORT_SYMBOL(__down_write);
-
-int __down_write_trylock(struct rw_semaphore *sem)
-{
-       int result;
-
-       __asm__ __volatile__(
-               "! beginning __down_write_trylock\n\t"
-               "sethi          %%hi(%2), %%g1\n\t"
-               "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%1], %%g3\n\t"
-               "cmp            %%g3, 0\n\t"
-               "bne,pn         %%icc, 2f\n\t"
-               " mov           0, %0\n\t"
-               "add            %%g3, %%g1, %%g7\n\t"
-               "cas            [%1], %%g3, %%g7\n\t"
-               "cmp            %%g3, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " mov           1, %0\n\t"
-               "membar         #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               "! ending __down_write_trylock"
-               : "=&r" (result)
-               : "r" (sem), "i" (RWSEM_ACTIVE_WRITE_BIAS)
-               : "g1", "g3", "g7", "memory", "cc");
-
-       return result;
-}
-EXPORT_SYMBOL(__down_write_trylock);
-
-void __up_read(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "! beginning __up_read\n\t"
-               "1:\tlduw       [%0], %%g1\n\t"
-               "sub            %%g1, 1, %%g7\n\t"
-               "cas            [%0], %%g1, %%g7\n\t"
-               "cmp            %%g1, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " cmp           %%g7, 0\n\t"
-               "bl,pn          %%icc, 3f\n\t"
-               " membar        #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               ".subsection    2\n"
-               "3:\tsethi      %%hi(%2), %%g1\n\t"
-               "sub            %%g7, 1, %%g7\n\t"
-               "or             %%g1, %%lo(%2), %%g1\n\t"
-               "andcc          %%g7, %%g1, %%g0\n\t"
-               "bne,pn         %%icc, 2b\n\t"
-               " mov           %0, %%g1\n\t"
-               "save           %%sp, -160, %%sp\n\t"
-               "call           %1\n\t"
-               " mov           %%g1, %%o0\n\t"
-               "ba,pt          %%xcc, 2b\n\t"
-               " restore\n\t"
-               ".previous\n\t"
-               "! ending __up_read"
-               : : "r" (sem), "i" (rwsem_wake),
-                   "i" (RWSEM_ACTIVE_MASK)
-               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
-}
-EXPORT_SYMBOL(__up_read);
-
-void __up_write(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "! beginning __up_write\n\t"
-               "sethi          %%hi(%2), %%g1\n\t"
-               "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%0], %%g3\n\t"
-               "sub            %%g3, %%g1, %%g7\n\t"
-               "cas            [%0], %%g3, %%g7\n\t"
-               "cmp            %%g3, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " sub           %%g7, %%g1, %%g7\n\t"
-               "cmp            %%g7, 0\n\t"
-               "bl,pn          %%icc, 3f\n\t"
-               " membar        #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               ".subsection 2\n"
-               "3:\tmov        %0, %%g1\n\t"
-               "save           %%sp, -160, %%sp\n\t"
-               "call           %1\n\t"
-               " mov           %%g1, %%o0\n\t"
-               "ba,pt          %%xcc, 2b\n\t"
-               " restore\n\t"
-               ".previous\n\t"
-               "! ending __up_write"
-               : : "r" (sem), "i" (rwsem_wake),
-                   "i" (RWSEM_ACTIVE_WRITE_BIAS)
-               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
-}
-EXPORT_SYMBOL(__up_write);
-
-void __downgrade_write(struct rw_semaphore *sem)
-{
-       __asm__ __volatile__(
-               "! beginning __downgrade_write\n\t"
-               "sethi          %%hi(%2), %%g1\n\t"
-               "or             %%g1, %%lo(%2), %%g1\n"
-               "1:\tlduw       [%0], %%g3\n\t"
-               "sub            %%g3, %%g1, %%g7\n\t"
-               "cas            [%0], %%g3, %%g7\n\t"
-               "cmp            %%g3, %%g7\n\t"
-               "bne,pn         %%icc, 1b\n\t"
-               " sub           %%g7, %%g1, %%g7\n\t"
-               "cmp            %%g7, 0\n\t"
-               "bl,pn          %%icc, 3f\n\t"
-               " membar        #StoreLoad | #StoreStore\n"
-               "2:\n\t"
-               ".subsection 2\n"
-               "3:\tmov        %0, %%g1\n\t"
-               "save           %%sp, -160, %%sp\n\t"
-               "call           %1\n\t"
-               " mov           %%g1, %%o0\n\t"
-               "ba,pt          %%xcc, 2b\n\t"
-               " restore\n\t"
-               ".previous\n\t"
-               "! ending __up_write"
-               : : "r" (sem), "i" (rwsem_downgrade_wake),
-                   "i" (RWSEM_WAITING_BIAS)
-               : "g1", "g2", "g3", "g5", "g7", "memory", "cc");
-}
-EXPORT_SYMBOL(__downgrade_write);
diff -Nru a/include/asm-sparc64/rwsem-const.h 
b/include/asm-sparc64/rwsem-const.h
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/include/asm-sparc64/rwsem-const.h 2005-04-03 21:12:20 -07:00
@@ -0,0 +1,12 @@
+/* rwsem-const.h: RW semaphore counter constants.  */
+#ifndef _SPARC64_RWSEM_CONST_H
+#define _SPARC64_RWSEM_CONST_H
+
+#define RWSEM_UNLOCKED_VALUE           0x00000000
+#define RWSEM_ACTIVE_BIAS              0x00000001
+#define RWSEM_ACTIVE_MASK              0x0000ffff
+#define RWSEM_WAITING_BIAS             0xffff0000
+#define RWSEM_ACTIVE_READ_BIAS         RWSEM_ACTIVE_BIAS
+#define RWSEM_ACTIVE_WRITE_BIAS                (RWSEM_WAITING_BIAS + 
RWSEM_ACTIVE_BIAS)
+
+#endif /* _SPARC64_RWSEM_CONST_H */
diff -Nru a/include/asm-sparc64/rwsem.h b/include/asm-sparc64/rwsem.h
--- a/include/asm-sparc64/rwsem.h       2005-04-03 21:12:20 -07:00
+++ b/include/asm-sparc64/rwsem.h       2005-04-03 21:12:20 -07:00
@@ -15,17 +15,12 @@
 
 #include <linux/list.h>
 #include <linux/spinlock.h>
+#include <asm/rwsem-const.h>
 
 struct rwsem_waiter;
 
 struct rw_semaphore {
        signed int count;
-#define RWSEM_UNLOCKED_VALUE           0x00000000
-#define RWSEM_ACTIVE_BIAS              0x00000001
-#define RWSEM_ACTIVE_MASK              0x0000ffff
-#define RWSEM_WAITING_BIAS             0xffff0000
-#define RWSEM_ACTIVE_READ_BIAS         RWSEM_ACTIVE_BIAS
-#define RWSEM_ACTIVE_WRITE_BIAS                (RWSEM_WAITING_BIAS + 
RWSEM_ACTIVE_BIAS)
        spinlock_t              wait_lock;
        struct list_head        wait_list;
 };
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to