alpha: switch to RAW_COPY_USER
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Mar 2017 12:13:02 +0000 (08:13 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 28 Mar 2017 22:23:19 +0000 (18:23 -0400)
copy_{to,from}_user() uninlined.  We can go back to inlined variants,
if we want to...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/alpha/Kconfig
arch/alpha/include/asm/uaccess.h

index 0e49d39..1be5f61 100644 (file)
@@ -26,6 +26,7 @@ config ALPHA
        select ODD_RT_SIGACTION
        select OLD_SIGSUSPEND
        select CPU_NO_EFFICIENT_FFS if !ALPHA_EV67
+       select ARCH_HAS_RAW_COPY_USER
        help
          The Alpha is a 64-bit general-purpose processor designed and
          marketed by the Digital Equipment Corporation of blessed memory,
index 9557c12..7b82dc9 100644 (file)
@@ -300,37 +300,16 @@ __asm__ __volatile__("1: stb %r2,%1\n"                            \
 
 extern long __copy_user(void *to, const void *from, long len);
 
-#define __copy_to_user(to, from, n)                    \
-({                                                     \
-       __chk_user_ptr(to);                             \
-       __copy_user((__force void *)(to), (from), (n)); \
-})
-#define __copy_from_user(to, from, n)                  \
-({                                                     \
-       __chk_user_ptr(from);                           \
-       __copy_user((to), (__force void *)(from), (n)); \
-})
-
-#define __copy_to_user_inatomic __copy_to_user
-#define __copy_from_user_inatomic __copy_from_user
-
-extern inline long
-copy_to_user(void __user *to, const void *from, long n)
+static inline unsigned long
+raw_copy_from_user(void *to, const void __user *from, unsigned long len)
 {
-       if (likely(__access_ok((unsigned long)to, n)))
-               n = __copy_user((__force void *)to, from, n);
-       return n;
+       return __copy_user(to, (__force const void *)from, len);
 }
 
-extern inline long
-copy_from_user(void *to, const void __user *from, long n)
+static inline unsigned long
+raw_copy_to_user(void __user *to, const void *from, unsigned long len)
 {
-       long res = n;
-       if (likely(__access_ok((unsigned long)from, n)))
-               res = __copy_from_user_inatomic(to, from, n);
-       if (unlikely(res))
-               memset(to + (n - res), 0, res);
-       return res;
+       return __copy_user((__force void *)to, from, len);
 }
 
 extern long __clear_user(void __user *to, long len);