Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

hexagon: switch to RAW_COPY_USER



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d597580d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ config HEXAGON
	select GENERIC_CLOCKEVENTS_BROADCAST
	select MODULES_USE_ELF_RELA
	select GENERIC_CPU_DEVICES
	select ARCH_HAS_RAW_COPY_USER
	---help---
	  Qualcomm Hexagon is a processor architecture designed for high
	  performance and low power across a wide variety of applications.
+10 −13
Original line number Diff line number Diff line
@@ -65,19 +65,12 @@
 */

/*  Assembly somewhat optimized copy routines  */
unsigned long __copy_from_user_hexagon(void *to, const void __user *from,
unsigned long raw_copy_from_user(void *to, const void __user *from,
				     unsigned long n);
unsigned long __copy_to_user_hexagon(void __user *to, const void *from,
unsigned long raw_copy_to_user(void __user *to, const void *from,
				   unsigned long n);

#define __copy_from_user(to, from, n) __copy_from_user_hexagon(to, from, n)
#define __copy_to_user(to, from, n) __copy_to_user_hexagon(to, from, n)

/*
 * XXX todo: some additonal performance gain is possible by
 * implementing __copy_to/from_user_inatomic, which is much
 * like __copy_to/from_user, but performs slightly less checking.
 */
#define INLINE_COPY_FROM_USER
#define INLINE_COPY_TO_USER

__kernel_size_t __clear_user_hexagon(void __user *dest, unsigned long count);
#define __clear_user(a, s) __clear_user_hexagon((a), (s))
@@ -104,10 +97,14 @@ static inline long hexagon_strncpy_from_user(char *dst, const char __user *src,
		return -EFAULT;

	if (res > n) {
		copy_from_user(dst, src, n);
		long left = raw_copy_from_user(dst, src, n);
		if (unlikely(left))
			memset(dst + (n - left), 0, left);
		return n;
	} else {
		copy_from_user(dst, src, res);
		long left = raw_copy_from_user(dst, src, res);
		if (unlikely(left))
			memset(dst + (res - left), 0, left);
		return res-1;
	}
}
+2 −2
Original line number Diff line number Diff line
@@ -25,8 +25,8 @@

/* Additional functions */
EXPORT_SYMBOL(__clear_user_hexagon);
EXPORT_SYMBOL(__copy_from_user_hexagon);
EXPORT_SYMBOL(__copy_to_user_hexagon);
EXPORT_SYMBOL(raw_copy_from_user);
EXPORT_SYMBOL(raw_copy_to_user);
EXPORT_SYMBOL(__iounmap);
EXPORT_SYMBOL(__strnlen_user);
EXPORT_SYMBOL(__vmgetie);
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@
#define bytes r2
#define loopcount r5

#define FUNCNAME __copy_from_user_hexagon
#define FUNCNAME raw_copy_from_user
#include "copy_user_template.S"

	/* LOAD FAULTS from COPY_FROM_USER */
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@
#define bytes r2
#define loopcount r5

#define FUNCNAME __copy_to_user_hexagon
#define FUNCNAME raw_copy_to_user
#include "copy_user_template.S"

	/* STORE FAULTS from COPY_TO_USER */