Loading arch/hexagon/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -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. Loading arch/hexagon/include/asm/uaccess.h +10 −13 Original line number Diff line number Diff line Loading @@ -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)) Loading @@ -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; } } Loading arch/hexagon/kernel/hexagon_ksyms.c +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading arch/hexagon/mm/copy_from_user.S +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading arch/hexagon/mm/copy_to_user.S +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading
arch/hexagon/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
arch/hexagon/include/asm/uaccess.h +10 −13 Original line number Diff line number Diff line Loading @@ -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)) Loading @@ -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; } } Loading
arch/hexagon/kernel/hexagon_ksyms.c +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading
arch/hexagon/mm/copy_from_user.S +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading
arch/hexagon/mm/copy_to_user.S +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading