Ver Fonte

alpha: switch to RAW_COPY_USER

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>
Al Viro há 8 anos atrás
pai
commit
ec022681a4
2 ficheiros alterados com 7 adições e 27 exclusões
  1. 1 0
      arch/alpha/Kconfig
  2. 6 27
      arch/alpha/include/asm/uaccess.h

+ 1 - 0
arch/alpha/Kconfig

@@ -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,

+ 6 - 27
arch/alpha/include/asm/uaccess.h

@@ -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);