diff options
author | Michal Simek <monstr@monstr.eu> | 2010-03-22 15:52:53 +0100 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2010-04-01 08:38:20 +0200 |
commit | cc5a428b7ae9c2d6233b5bf6b3e6fbb24ddd1ed5 (patch) | |
tree | 42c745eae2cd81ea467cdca3ae05bc197838b73f /arch | |
parent | 0dcb409de73edeb221aed38d9ff8640cf41ff0de (diff) |
microblaze: uaccess: copy_to_user unification
noMMU and MMU kernel will use copy copy_tofrom_user
asm implementation.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/microblaze/include/asm/uaccess.h | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h index 6bb9b8fb6655..125e4cf4105c 100644 --- a/arch/microblaze/include/asm/uaccess.h +++ b/arch/microblaze/include/asm/uaccess.h @@ -372,19 +372,28 @@ extern long __user_bad(void); ? __put_user((x), (ptr)) : -EFAULT; \ }) +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_inatomic(to, from, n) \ copy_from_user((to), (from), (n)) -#define copy_to_user(to, from, n) \ - (access_ok(VERIFY_WRITE, (to), (n)) ? \ - __copy_tofrom_user((void __user *)(to), \ - (__force const void __user *)(from), (n)) \ - : -EFAULT) - -#define __copy_to_user(to, from, n) copy_to_user((to), (from), (n)) +#define __copy_to_user(to, from, n) \ + __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)) +static inline long copy_to_user(void __user *to, + const void *from, unsigned long n) +{ + might_sleep(); + if (access_ok(VERIFY_WRITE, to, n)) + return __copy_to_user(to, from, n); + else + return n; +} + #define copy_from_user(to, from, n) \ (access_ok(VERIFY_READ, (from), (n)) ? \ __copy_tofrom_user((__force void __user *)(to), \ @@ -402,8 +411,6 @@ extern int __strnlen_user(const char __user *sstr, int len); #endif /* CONFIG_MMU */ -extern unsigned long __copy_tofrom_user(void __user *to, - const void __user *from, unsigned long size); #endif /* __ASSEMBLY__ */ #endif /* __KERNEL__ */ |