sparc: use the new generic strnlen_user() function
authorDavid Miller <davem@davemloft.net>
Sat, 26 May 2012 18:14:27 +0000 (11:14 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 26 May 2012 18:33:54 +0000 (11:33 -0700)
This throws away the sparc-specific functions in favor of the generic
optimized version.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/sparc/Kconfig
arch/sparc/include/asm/uaccess_32.h
arch/sparc/include/asm/uaccess_64.h
arch/sparc/lib/Makefile
arch/sparc/lib/ksyms.c
arch/sparc/lib/strlen_user_32.S [deleted file]
arch/sparc/lib/strlen_user_64.S [deleted file]

index 15e9e05740da3382a43f9d8f4c45585ee461e1d1..83bd051754e1fecddc0be891676bb9f57d62ad8f 100644 (file)
@@ -35,6 +35,7 @@ config SPARC
        select GENERIC_CMOS_UPDATE
        select GENERIC_CLOCKEVENTS
        select GENERIC_STRNCPY_FROM_USER
+       select GENERIC_STRNLEN_USER
 
 config SPARC32
        def_bool !64BIT
index 59586b57ef1a45e33a7b29505e35ec192feb808d..53a28dd59f59582b91ec9da33313713d94fe192c 100644 (file)
@@ -16,6 +16,8 @@
 
 #ifndef __ASSEMBLY__
 
+#include <asm/processor.h>
+
 #define ARCH_HAS_SORT_EXTABLE
 #define ARCH_HAS_SEARCH_EXTABLE
 
@@ -304,24 +306,8 @@ static inline unsigned long clear_user(void __user *addr, unsigned long n)
                return n;
 }
 
-extern long __strlen_user(const char __user *);
-extern long __strnlen_user(const char __user *, long len);
-
-static inline long strlen_user(const char __user *str)
-{
-       if (!access_ok(VERIFY_READ, str, 0))
-               return 0;
-       else
-               return __strlen_user(str);
-}
-
-static inline long strnlen_user(const char __user *str, long len)
-{
-       if (!access_ok(VERIFY_READ, str, 0))
-               return 0;
-       else
-               return __strnlen_user(str, len);
-}
+extern __must_check long strlen_user(const char __user *str);
+extern __must_check long strnlen_user(const char __user *str, long n);
 
 #endif  /* __ASSEMBLY__ */
 
index dcdfb89cbf3fff2a32b87fd6bb232c65e7ee3196..7c831d848b4e10b93737d619f2789fe00ba5fe13 100644 (file)
@@ -17,6 +17,8 @@
 
 #ifndef __ASSEMBLY__
 
+#include <asm/processor.h>
+
 /*
  * Sparc64 is segmented, though more like the M68K than the I386.
  * We use the secondary ASI to address user memory, which references a
@@ -257,11 +259,9 @@ extern unsigned long __must_check __clear_user(void __user *, unsigned long);
 
 #define clear_user __clear_user
 
-extern long __strlen_user(const char __user *);
-extern long __strnlen_user(const char __user *, long len);
+extern __must_check long strlen_user(const char __user *str);
+extern __must_check long strnlen_user(const char __user *str, long n);
 
-#define strlen_user __strlen_user
-#define strnlen_user __strnlen_user
 #define __copy_to_user_inatomic ___copy_to_user
 #define __copy_from_user_inatomic ___copy_from_user
 
index 943d98dc4cdb55469c9d727453112d9727af1222..dff4096f3dec045472e037a62d644d1e8cbb910e 100644 (file)
@@ -10,7 +10,6 @@ lib-y                 += strlen.o
 lib-y                 += checksum_$(BITS).o
 lib-$(CONFIG_SPARC32) += blockops.o
 lib-y                 += memscan_$(BITS).o memcmp.o strncmp_$(BITS).o
-lib-y                 += strlen_user_$(BITS).o
 lib-$(CONFIG_SPARC32) += divdi3.o udivdi3.o
 lib-$(CONFIG_SPARC32) += copy_user.o locks.o
 lib-$(CONFIG_SPARC64) += atomic_64.o
index 6b278abdb63decf5c231098e217bbf4a1c97aa6b..3b31218cafc6c515d0f24ee809004e15b3e4ab94 100644 (file)
@@ -15,8 +15,6 @@
 
 /* string functions */
 EXPORT_SYMBOL(strlen);
-EXPORT_SYMBOL(__strlen_user);
-EXPORT_SYMBOL(__strnlen_user);
 EXPORT_SYMBOL(strncmp);
 
 /* mem* functions */
diff --git a/arch/sparc/lib/strlen_user_32.S b/arch/sparc/lib/strlen_user_32.S
deleted file mode 100644 (file)
index 8c8a371..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* strlen_user.S: Sparc optimized strlen_user code
- *
- * Return length of string in userspace including terminating 0
- * or 0 for error
- *
- * Copyright (C) 1991,1996 Free Software Foundation
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- */
-
-#define LO_MAGIC 0x01010101
-#define HI_MAGIC 0x80808080
-
-10:
-       ldub    [%o0], %o5
-       cmp     %o5, 0
-       be      1f
-        add    %o0, 1, %o0
-       andcc   %o0, 3, %g0
-       be      4f
-        or     %o4, %lo(HI_MAGIC), %o3
-11:
-       ldub    [%o0], %o5
-       cmp     %o5, 0
-       be      2f
-        add    %o0, 1, %o0
-       andcc   %o0, 3, %g0
-       be      5f
-        sethi  %hi(LO_MAGIC), %o4
-12:
-       ldub    [%o0], %o5
-       cmp     %o5, 0
-       be      3f
-        add    %o0, 1, %o0
-       b       13f
-        or     %o4, %lo(LO_MAGIC), %o2
-1:
-       retl
-        mov    1, %o0
-2:
-       retl
-        mov    2, %o0
-3:
-       retl
-        mov    3, %o0
-
-       .align 4
-       .global __strlen_user, __strnlen_user
-__strlen_user:
-       sethi   %hi(32768), %o1
-__strnlen_user:
-       mov     %o1, %g1
-       mov     %o0, %o1
-       andcc   %o0, 3, %g0
-       bne     10b
-        sethi  %hi(HI_MAGIC), %o4
-       or      %o4, %lo(HI_MAGIC), %o3
-4:
-       sethi   %hi(LO_MAGIC), %o4
-5:
-       or      %o4, %lo(LO_MAGIC), %o2
-13:
-       ld      [%o0], %o5
-2:
-       sub     %o5, %o2, %o4
-       andcc   %o4, %o3, %g0
-       bne     82f
-        add    %o0, 4, %o0
-       sub     %o0, %o1, %g2
-81:    cmp     %g2, %g1
-       blu     13b
-        mov    %o0, %o4
-       ba,a    1f
-
-       /* Check every byte. */
-82:    srl     %o5, 24, %g5
-       andcc   %g5, 0xff, %g0
-       be      1f
-        add    %o0, -3, %o4
-       srl     %o5, 16, %g5
-       andcc   %g5, 0xff, %g0
-       be      1f
-        add    %o4, 1, %o4
-       srl     %o5, 8, %g5
-       andcc   %g5, 0xff, %g0
-       be      1f
-        add    %o4, 1, %o4
-       andcc   %o5, 0xff, %g0
-       bne     81b
-        sub    %o0, %o1, %g2
-
-       add     %o4, 1, %o4
-1:
-       retl
-        sub    %o4, %o1, %o0
-
-       .section .fixup,#alloc,#execinstr
-       .align  4
-9:
-       retl
-        clr    %o0
-
-       .section __ex_table,#alloc
-       .align  4
-
-       .word   10b, 9b
-       .word   11b, 9b
-       .word   12b, 9b
-       .word   13b, 9b
diff --git a/arch/sparc/lib/strlen_user_64.S b/arch/sparc/lib/strlen_user_64.S
deleted file mode 100644 (file)
index c3df71f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* strlen_user.S: Sparc64 optimized strlen_user code
- *
- * Return length of string in userspace including terminating 0
- * or 0 for error
- *
- * Copyright (C) 1991,1996 Free Software Foundation
- * Copyright (C) 1996,1999 David S. Miller (davem@redhat.com)
- * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- */
-
-#include <linux/linkage.h>
-#include <asm/asi.h>
-
-#define LO_MAGIC 0x01010101
-#define HI_MAGIC 0x80808080
-
-       .align 4
-ENTRY(__strlen_user)
-       sethi   %hi(32768), %o1
-ENTRY(__strnlen_user)
-       mov     %o1, %g1
-       mov     %o0, %o1
-       andcc   %o0, 3, %g0
-       be,pt   %icc, 9f
-        sethi  %hi(HI_MAGIC), %o4
-10:    lduba   [%o0] %asi, %o5
-       brz,pn  %o5, 21f
-        add    %o0, 1, %o0
-       andcc   %o0, 3, %g0
-       be,pn   %icc, 4f
-        or     %o4, %lo(HI_MAGIC), %o3
-11:    lduba   [%o0] %asi, %o5
-       brz,pn  %o5, 22f
-        add    %o0, 1, %o0
-       andcc   %o0, 3, %g0
-       be,pt   %icc, 13f
-        srl    %o3, 7, %o2
-12:    lduba   [%o0] %asi, %o5
-       brz,pn  %o5, 23f
-        add    %o0, 1, %o0
-       ba,pt   %icc, 2f
-15:     lda    [%o0] %asi, %o5
-9:     or      %o4, %lo(HI_MAGIC), %o3
-4:     srl     %o3, 7, %o2
-13:    lda     [%o0] %asi, %o5
-2:     sub     %o5, %o2, %o4
-       andcc   %o4, %o3, %g0
-       bne,pn  %icc, 82f
-        add    %o0, 4, %o0
-       sub     %o0, %o1, %g2
-81:    cmp     %g2, %g1
-       blu,pt  %icc, 13b
-        mov    %o0, %o4
-       ba,a,pt %xcc, 1f
-
-       /* Check every byte. */
-82:    srl     %o5, 24, %g7
-       andcc   %g7, 0xff, %g0
-       be,pn   %icc, 1f
-        add    %o0, -3, %o4
-       srl     %o5, 16, %g7
-       andcc   %g7, 0xff, %g0
-       be,pn   %icc, 1f
-        add    %o4, 1, %o4
-       srl     %o5, 8, %g7
-       andcc   %g7, 0xff, %g0
-       be,pn   %icc, 1f
-        add    %o4, 1, %o4
-       andcc   %o5, 0xff, %g0
-       bne,pt  %icc, 81b
-        sub    %o0, %o1, %g2
-       add     %o4, 1, %o4
-1:     retl
-        sub    %o4, %o1, %o0
-21:    retl
-        mov    1, %o0
-22:    retl
-        mov    2, %o0
-23:    retl
-        mov    3, %o0
-ENDPROC(__strlen_user)
-ENDPROC(__strnlen_user)
-
-        .section .fixup,#alloc,#execinstr
-        .align  4
-30:
-        retl
-         clr    %o0
-
-       .section __ex_table,"a"
-       .align  4
-
-       .word   10b, 30b
-       .word   11b, 30b
-       .word   12b, 30b
-       .word   15b, 30b
-       .word   13b, 30b