Commit e5c15400 authored by Al Viro's avatar Al Viro
Browse files

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ config AVR32
	select HAVE_MOD_ARCH_SPECIFIC
	select MODULES_USE_ELF_RELA
	select HAVE_NMI
	select ARCH_HAS_RAW_COPY_USER
	help
	  AVR32 is a high-performance 32-bit RISC microprocessor core,
	  designed for cost-sensitive embedded applications, with particular
+6 −22
Original line number Diff line number Diff line
@@ -66,34 +66,18 @@ static inline void set_fs(mm_segment_t s)
extern __kernel_size_t __copy_user(void *to, const void *from,
				   __kernel_size_t n);

extern __kernel_size_t copy_to_user(void __user *to, const void *from,
				    __kernel_size_t 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)
static inline unsigned long
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
{
	return __copy_user((void __force *)to, from, n);
}
static inline __kernel_size_t __copy_from_user(void *to,
					       const void __user *from,
					       __kernel_size_t n)
static inline unsigned long
raw_copy_from_user(void *to, const void __user *from, unsigned long n)
{
	return __copy_user(to, (const void __force *)from, n);
}
static inline __kernel_size_t copy_from_user(void *to,
					       const void __user *from,
					       __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
#define INLINE_COPY_FROM_USER
#define INLINE_COPY_TO_USER

/*
 * put_user: - Write a simple value into user space.
+0 −2
Original line number Diff line number Diff line
@@ -36,8 +36,6 @@ EXPORT_SYMBOL(copy_page);
/*
 * Userspace access stuff.
 */
EXPORT_SYMBOL(___copy_from_user);
EXPORT_SYMBOL(copy_to_user);
EXPORT_SYMBOL(__copy_user);
EXPORT_SYMBOL(strncpy_from_user);
EXPORT_SYMBOL(__strncpy_from_user);
+0 −15
Original line number Diff line number Diff line
@@ -23,21 +23,6 @@
	 */
	.text
	.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
	.type	__copy_user, @function
__copy_user: