diff options
author | Jonas Bonn <jonas@southpole.se> | 2012-05-25 08:24:49 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-25 08:17:43 -0700 |
commit | 603d6637aeb9a14cd0087d7c24c3777bfa51fcbf (patch) | |
tree | 8b86e31d3d0a9d88b12629c27d2607d6e1420ac8 /arch | |
parent | ece78b7df734726e790dcab207f463401ff80440 (diff) | |
download | lwn-603d6637aeb9a14cd0087d7c24c3777bfa51fcbf.tar.gz lwn-603d6637aeb9a14cd0087d7c24c3777bfa51fcbf.zip |
openrisc: use generic strncpy_from_user
As per commits 2922585b9329 ("lib: Sparc's strncpy_from_user is generic
enough, move under lib/") and 92ae03f2ef99 ("x86: merge 32/64-bit
versions of 'strncpy_from_user()' and speed it up"), and corresponding
discussion on linux-arch.
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/openrisc/Kconfig | 1 | ||||
-rw-r--r-- | arch/openrisc/include/asm/uaccess.h | 10 | ||||
-rw-r--r-- | arch/openrisc/lib/string.S | 52 |
3 files changed, 4 insertions, 59 deletions
diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig index 4932247d078a..065623215c58 100644 --- a/arch/openrisc/Kconfig +++ b/arch/openrisc/Kconfig @@ -19,6 +19,7 @@ config OPENRISC select GENERIC_CPU_DEVICES select GENERIC_ATOMIC64 select GENERIC_CLOCKEVENTS + select GENERIC_STRNCPY_FROM_USER config MMU def_bool y diff --git a/arch/openrisc/include/asm/uaccess.h b/arch/openrisc/include/asm/uaccess.h index f5abaa0ffc38..04b93de92636 100644 --- a/arch/openrisc/include/asm/uaccess.h +++ b/arch/openrisc/include/asm/uaccess.h @@ -313,14 +313,10 @@ clear_user(void *addr, unsigned long size) return size; } -extern int __strncpy_from_user(char *dst, const char *src, long count); +#define user_addr_max() \ + (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) -static inline long strncpy_from_user(char *dst, const char *src, long count) -{ - if (access_ok(VERIFY_READ, src, 1)) - return __strncpy_from_user(dst, src, count); - return -EFAULT; -} +extern long strncpy_from_user(char *dest, const char __user *src, long count); /* * Return the size of a string (including the ending 0) diff --git a/arch/openrisc/lib/string.S b/arch/openrisc/lib/string.S index 465f04bc7deb..8ceb11ebafb9 100644 --- a/arch/openrisc/lib/string.S +++ b/arch/openrisc/lib/string.S @@ -104,58 +104,6 @@ __clear_user: .long 9b, 99b // write fault .previous -/* - * long strncpy_from_user(char *dst, const char *src, long count) - * - * - */ - .global __strncpy_from_user -__strncpy_from_user: - l.addi r1,r1,-16 - l.sw 0(r1),r6 - l.sw 4(r1),r5 - l.sw 8(r1),r4 - l.sw 12(r1),r3 - - l.addi r11,r5,0 -2: l.sfeq r5,r0 - l.bf 1f - l.addi r5,r5,-1 -8: l.lbz r6,0(r4) - l.sfeq r6,r0 - l.bf 1f -9: l.sb 0(r3),r6 - l.addi r3,r3,1 - l.j 2b - l.addi r4,r4,1 -1: - l.lwz r6,0(r1) - l.addi r5,r5,1 - l.sub r11,r11,r5 // r11 holds the return value - - l.lwz r6,0(r1) - l.lwz r5,4(r1) - l.lwz r4,8(r1) - l.lwz r3,12(r1) - l.jr r9 - l.addi r1,r1,16 - - .section .fixup, "ax" -99: - l.movhi r11,hi(-EFAULT) - l.ori r11,r11,lo(-EFAULT) - - l.lwz r6,0(r1) - l.lwz r5,4(r1) - l.lwz r4,8(r1) - l.lwz r3,12(r1) - l.jr r9 - l.addi r1,r1,16 - .previous - - .section __ex_table, "a" - .long 8b, 99b // read fault - .previous /* * extern int __strnlen_user(const char *str, long len, unsigned long top); |