microblaze: uaccess: fix copy_from_user macro
authorMichal Simek <monstr@monstr.eu>
Mon, 22 Mar 2010 14:56:32 +0000 (15:56 +0100)
committerMichal Simek <monstr@monstr.eu>
Thu, 1 Apr 2010 06:38:21 +0000 (08:38 +0200)
copy_from_user macro also use copy_tofrom_user function

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/include/asm/uaccess.h

index 125e4cf4105c6c0d7b927d6f887c258f7c0d04d8..b56d8ae9b17e8c84e0a4198ee5d0967378a6278e 100644 (file)
@@ -375,12 +375,24 @@ extern long __user_bad(void);
 extern unsigned long __copy_tofrom_user(void __user *to,
                const void __user *from, unsigned long size);
 
-#define __copy_from_user(to, from, n)  copy_from_user((to), (from), (n))
+#define __copy_from_user(to, from, n)  \
+       __copy_tofrom_user((__force void __user *)(to), \
+                               (void __user *)(from), (n))
 #define __copy_from_user_inatomic(to, from, n) \
                copy_from_user((to), (from), (n))
 
+static inline long copy_from_user(void *to,
+               const void __user *from, unsigned long n)
+{
+       might_sleep();
+       if (access_ok(VERIFY_READ, from, n))
+               return __copy_from_user(to, from, n);
+       else
+               return n;
+}
+
 #define __copy_to_user(to, from, n)    \
-       __copy_tofrom_user((void __user *)(to), \
+               __copy_tofrom_user((void __user *)(to), \
                        (__force const void __user *)(from), (n))
 #define __copy_to_user_inatomic(to, from, n)   copy_to_user((to), (from), (n))
 
@@ -394,12 +406,6 @@ static inline long copy_to_user(void __user *to,
                return n;
 }
 
-#define copy_from_user(to, from, n)                                    \
-       (access_ok(VERIFY_READ, (from), (n)) ?                          \
-               __copy_tofrom_user((__force void __user *)(to),         \
-                       (void __user *)(from), (n))                     \
-               : -EFAULT)
-
 extern int __strncpy_user(char *to, const char __user *from, int len);
 extern int __strnlen_user(const char __user *sstr, int len);
 
@@ -411,7 +417,6 @@ extern int __strnlen_user(const char __user *sstr, int len);
 
 #endif /* CONFIG_MMU */
 
-
 #endif  /* __ASSEMBLY__ */
 #endif /* __KERNEL__ */