hexagon: switch to RAW_COPY_USER
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d597580d37
commit
ac4691fac8
|
@ -26,6 +26,7 @@ config HEXAGON
|
||||||
select GENERIC_CLOCKEVENTS_BROADCAST
|
select GENERIC_CLOCKEVENTS_BROADCAST
|
||||||
select MODULES_USE_ELF_RELA
|
select MODULES_USE_ELF_RELA
|
||||||
select GENERIC_CPU_DEVICES
|
select GENERIC_CPU_DEVICES
|
||||||
|
select ARCH_HAS_RAW_COPY_USER
|
||||||
---help---
|
---help---
|
||||||
Qualcomm Hexagon is a processor architecture designed for high
|
Qualcomm Hexagon is a processor architecture designed for high
|
||||||
performance and low power across a wide variety of applications.
|
performance and low power across a wide variety of applications.
|
||||||
|
|
|
@ -65,19 +65,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Assembly somewhat optimized copy routines */
|
/* 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 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);
|
unsigned long n);
|
||||||
|
#define INLINE_COPY_FROM_USER
|
||||||
#define __copy_from_user(to, from, n) __copy_from_user_hexagon(to, from, n)
|
#define INLINE_COPY_TO_USER
|
||||||
#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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
__kernel_size_t __clear_user_hexagon(void __user *dest, unsigned long count);
|
__kernel_size_t __clear_user_hexagon(void __user *dest, unsigned long count);
|
||||||
#define __clear_user(a, s) __clear_user_hexagon((a), (s))
|
#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;
|
return -EFAULT;
|
||||||
|
|
||||||
if (res > n) {
|
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;
|
return n;
|
||||||
} else {
|
} 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;
|
return res-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
|
|
||||||
/* Additional functions */
|
/* Additional functions */
|
||||||
EXPORT_SYMBOL(__clear_user_hexagon);
|
EXPORT_SYMBOL(__clear_user_hexagon);
|
||||||
EXPORT_SYMBOL(__copy_from_user_hexagon);
|
EXPORT_SYMBOL(raw_copy_from_user);
|
||||||
EXPORT_SYMBOL(__copy_to_user_hexagon);
|
EXPORT_SYMBOL(raw_copy_to_user);
|
||||||
EXPORT_SYMBOL(__iounmap);
|
EXPORT_SYMBOL(__iounmap);
|
||||||
EXPORT_SYMBOL(__strnlen_user);
|
EXPORT_SYMBOL(__strnlen_user);
|
||||||
EXPORT_SYMBOL(__vmgetie);
|
EXPORT_SYMBOL(__vmgetie);
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
#define bytes r2
|
#define bytes r2
|
||||||
#define loopcount r5
|
#define loopcount r5
|
||||||
|
|
||||||
#define FUNCNAME __copy_from_user_hexagon
|
#define FUNCNAME raw_copy_from_user
|
||||||
#include "copy_user_template.S"
|
#include "copy_user_template.S"
|
||||||
|
|
||||||
/* LOAD FAULTS from COPY_FROM_USER */
|
/* LOAD FAULTS from COPY_FROM_USER */
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
#define bytes r2
|
#define bytes r2
|
||||||
#define loopcount r5
|
#define loopcount r5
|
||||||
|
|
||||||
#define FUNCNAME __copy_to_user_hexagon
|
#define FUNCNAME raw_copy_to_user
|
||||||
#include "copy_user_template.S"
|
#include "copy_user_template.S"
|
||||||
|
|
||||||
/* STORE FAULTS from COPY_TO_USER */
|
/* STORE FAULTS from COPY_TO_USER */
|
||||||
|
|
Loading…
Reference in New Issue