frv: switch to RAW_COPY_USER
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Mar 2017 12:46:17 +0000 (08:46 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 28 Mar 2017 22:23:32 +0000 (18:23 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/frv/Kconfig
arch/frv/include/asm/uaccess.h

index eefd9a4ed156753b6f07cb41cd0cb97ca0f99a48..e489fef111dd7428a5644196c80720c6a8cb95d3 100644 (file)
@@ -16,6 +16,7 @@ config FRV
        select OLD_SIGACTION
        select HAVE_DEBUG_STACKOVERFLOW
        select ARCH_NO_COHERENT_DMA_MMAP
+       select ARCH_HAS_RAW_COPY_USER
 
 config ZONE_DMA
        bool
index 5bcc57de3c9545097aaa368ae561e67c9e9029a5..e4e33b4cd3aeaea84b8ffa58c1895f07dd2cd643 100644 (file)
@@ -233,61 +233,50 @@ do {                                                      \
 /*
  *
  */
+
 #define ____force(x) (__force void *)(void __user *)(x)
 #ifdef CONFIG_MMU
 extern long __memset_user(void *dst, unsigned long count);
 extern long __memcpy_user(void *dst, const void *src, unsigned long count);
 
 #define __clear_user(dst,count)                        __memset_user(____force(dst), (count))
-#define __copy_from_user_inatomic(to, from, n) __memcpy_user((to), ____force(from), (n))
-#define __copy_to_user_inatomic(to, from, n)   __memcpy_user(____force(to), (from), (n))
 
 #else
 
 #define __clear_user(dst,count)                        (memset(____force(dst), 0, (count)), 0)
-#define __copy_from_user_inatomic(to, from, n) (memcpy((to), ____force(from), (n)), 0)
-#define __copy_to_user_inatomic(to, from, n)   (memcpy(____force(to), (from), (n)), 0)
 
 #endif
 
-static inline unsigned long __must_check
-clear_user(void __user *to, unsigned long n)
-{
-       if (likely(__access_ok(to, n)))
-               n = __clear_user(to, n);
-       return n;
-}
-
-static inline unsigned long __must_check
-__copy_to_user(void __user *to, const void *from, unsigned long n)
-{
-       might_fault();
-       return __copy_to_user_inatomic(to, from, n);
-}
-
 static inline unsigned long
-__copy_from_user(void *to, const void __user *from, unsigned long n)
+raw_copy_from_user(void *to, const void __user *from, unsigned long n)
 {
-       might_fault();
-       return __copy_from_user_inatomic(to, from, n);
+#ifdef CONFIG_MMU
+       return __memcpy_user(to, (__force const void *)from, n);
+#else
+       memcpy(to, (__force const void *)from, n);
+       return 0;
+#endif
 }
 
-static inline long copy_from_user(void *to, const void __user *from, unsigned long n)
+static inline unsigned long
+raw_copy_to_user(void __user *to, const void *from, unsigned long n)
 {
-       unsigned long ret = n;
-
-       if (likely(__access_ok(from, n)))
-               ret = __copy_from_user(to, from, n);
-
-       if (unlikely(ret != 0))
-               memset(to + (n - ret), 0, ret);
-
-       return ret;
+#ifdef CONFIG_MMU
+       return __memcpy_user((__force void *)to, from, n);
+#else
+       memcpy((__force void *)to, from, n);
+       return 0;
+#endif
 }
+#define INLINE_COPY_TO_USER
+#define INLINE_COPY_FROM_USER
 
-static inline long copy_to_user(void __user *to, const void *from, unsigned long n)
+static inline unsigned long __must_check
+clear_user(void __user *to, unsigned long n)
 {
-       return likely(__access_ok(to, n)) ? __copy_to_user(to, from, n) : n;
+       if (likely(__access_ok(to, n)))
+               n = __clear_user(to, n);
+       return n;
 }
 
 extern long strncpy_from_user(char *dst, const char __user *src, long count);