Commit e5c15400 authored by Al Viro's avatar Al Viro

avr32: switch to RAW_COPY_USER

This one needs profiling; use of asm variant of access_ok() might have
been performance-critical.  Now copy_{to,from}_user() are using the
C variant.  I doubt that it's going to have visible effects, but
that needs to be experimentally verified.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5cbe865b
...@@ -19,6 +19,7 @@ config AVR32 ...@@ -19,6 +19,7 @@ config AVR32
select HAVE_MOD_ARCH_SPECIFIC select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA
select HAVE_NMI select HAVE_NMI
select ARCH_HAS_RAW_COPY_USER
help help
AVR32 is a high-performance 32-bit RISC microprocessor core, AVR32 is a high-performance 32-bit RISC microprocessor core,
designed for cost-sensitive embedded applications, with particular designed for cost-sensitive embedded applications, with particular
......
...@@ -66,34 +66,18 @@ static inline void set_fs(mm_segment_t s) ...@@ -66,34 +66,18 @@ static inline void set_fs(mm_segment_t s)
extern __kernel_size_t __copy_user(void *to, const void *from, extern __kernel_size_t __copy_user(void *to, const void *from,
__kernel_size_t n); __kernel_size_t n);
extern __kernel_size_t copy_to_user(void __user *to, const void *from, static inline unsigned long
__kernel_size_t n); raw_copy_to_user(void __user *to, const void *from, unsigned long n)
extern __kernel_size_t ___copy_from_user(void *to, const void __user *from,
__kernel_size_t n);
static inline __kernel_size_t __copy_to_user(void __user *to, const void *from,
__kernel_size_t n)
{ {
return __copy_user((void __force *)to, from, n); return __copy_user((void __force *)to, from, n);
} }
static inline __kernel_size_t __copy_from_user(void *to, static inline unsigned long
const void __user *from, raw_copy_from_user(void *to, const void __user *from, unsigned long n)
__kernel_size_t n)
{ {
return __copy_user(to, (const void __force *)from, n); return __copy_user(to, (const void __force *)from, n);
} }
static inline __kernel_size_t copy_from_user(void *to, #define INLINE_COPY_FROM_USER
const void __user *from, #define INLINE_COPY_TO_USER
__kernel_size_t n)
{
size_t res = ___copy_from_user(to, from, n);
if (unlikely(res))
memset(to + (n - res), 0, res);
return res;
}
#define __copy_to_user_inatomic __copy_to_user
#define __copy_from_user_inatomic __copy_from_user
/* /*
* put_user: - Write a simple value into user space. * put_user: - Write a simple value into user space.
......
...@@ -36,8 +36,6 @@ EXPORT_SYMBOL(copy_page); ...@@ -36,8 +36,6 @@ EXPORT_SYMBOL(copy_page);
/* /*
* Userspace access stuff. * Userspace access stuff.
*/ */
EXPORT_SYMBOL(___copy_from_user);
EXPORT_SYMBOL(copy_to_user);
EXPORT_SYMBOL(__copy_user); EXPORT_SYMBOL(__copy_user);
EXPORT_SYMBOL(strncpy_from_user); EXPORT_SYMBOL(strncpy_from_user);
EXPORT_SYMBOL(__strncpy_from_user); EXPORT_SYMBOL(__strncpy_from_user);
......
...@@ -23,21 +23,6 @@ ...@@ -23,21 +23,6 @@
*/ */
.text .text
.align 1 .align 1
.global ___copy_from_user
.type ___copy_from_user, @function
___copy_from_user:
branch_if_kernel r8, __copy_user
ret_if_privileged r8, r11, r10, r10
rjmp __copy_user
.size ___copy_from_user, . - ___copy_from_user
.global copy_to_user
.type copy_to_user, @function
copy_to_user:
branch_if_kernel r8, __copy_user
ret_if_privileged r8, r12, r10, r10
.size copy_to_user, . - copy_to_user
.global __copy_user .global __copy_user
.type __copy_user, @function .type __copy_user, @function
__copy_user: __copy_user:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment