diff options
| author | Jonas Bonn <jonas@southpole.se> | 2012-05-25 02:24:49 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-25 11:17:43 -0400 |
| commit | 603d6637aeb9a14cd0087d7c24c3777bfa51fcbf (patch) | |
| tree | 8b86e31d3d0a9d88b12629c27d2607d6e1420ac8 | |
| parent | ece78b7df734726e790dcab207f463401ff80440 (diff) | |
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>
| -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 | |||
| 19 | select GENERIC_CPU_DEVICES | 19 | select GENERIC_CPU_DEVICES |
| 20 | select GENERIC_ATOMIC64 | 20 | select GENERIC_ATOMIC64 |
| 21 | select GENERIC_CLOCKEVENTS | 21 | select GENERIC_CLOCKEVENTS |
| 22 | select GENERIC_STRNCPY_FROM_USER | ||
| 22 | 23 | ||
| 23 | config MMU | 24 | config MMU |
| 24 | def_bool y | 25 | 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) | |||
| 313 | return size; | 313 | return size; |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | extern int __strncpy_from_user(char *dst, const char *src, long count); | 316 | #define user_addr_max() \ |
| 317 | (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) | ||
| 317 | 318 | ||
| 318 | static inline long strncpy_from_user(char *dst, const char *src, long count) | 319 | extern long strncpy_from_user(char *dest, const char __user *src, long count); |
| 319 | { | ||
| 320 | if (access_ok(VERIFY_READ, src, 1)) | ||
| 321 | return __strncpy_from_user(dst, src, count); | ||
| 322 | return -EFAULT; | ||
| 323 | } | ||
| 324 | 320 | ||
| 325 | /* | 321 | /* |
| 326 | * Return the size of a string (including the ending 0) | 322 | * 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: | |||
| 104 | .long 9b, 99b // write fault | 104 | .long 9b, 99b // write fault |
| 105 | .previous | 105 | .previous |
| 106 | 106 | ||
| 107 | /* | ||
| 108 | * long strncpy_from_user(char *dst, const char *src, long count) | ||
| 109 | * | ||
| 110 | * | ||
| 111 | */ | ||
| 112 | .global __strncpy_from_user | ||
| 113 | __strncpy_from_user: | ||
| 114 | l.addi r1,r1,-16 | ||
| 115 | l.sw 0(r1),r6 | ||
| 116 | l.sw 4(r1),r5 | ||
| 117 | l.sw 8(r1),r4 | ||
| 118 | l.sw 12(r1),r3 | ||
| 119 | |||
| 120 | l.addi r11,r5,0 | ||
| 121 | 2: l.sfeq r5,r0 | ||
| 122 | l.bf 1f | ||
| 123 | l.addi r5,r5,-1 | ||
| 124 | 8: l.lbz r6,0(r4) | ||
| 125 | l.sfeq r6,r0 | ||
| 126 | l.bf 1f | ||
| 127 | 9: l.sb 0(r3),r6 | ||
| 128 | l.addi r3,r3,1 | ||
| 129 | l.j 2b | ||
| 130 | l.addi r4,r4,1 | ||
| 131 | 1: | ||
| 132 | l.lwz r6,0(r1) | ||
| 133 | l.addi r5,r5,1 | ||
| 134 | l.sub r11,r11,r5 // r11 holds the return value | ||
| 135 | |||
| 136 | l.lwz r6,0(r1) | ||
| 137 | l.lwz r5,4(r1) | ||
| 138 | l.lwz r4,8(r1) | ||
| 139 | l.lwz r3,12(r1) | ||
| 140 | l.jr r9 | ||
| 141 | l.addi r1,r1,16 | ||
| 142 | |||
| 143 | .section .fixup, "ax" | ||
| 144 | 99: | ||
| 145 | l.movhi r11,hi(-EFAULT) | ||
| 146 | l.ori r11,r11,lo(-EFAULT) | ||
| 147 | |||
| 148 | l.lwz r6,0(r1) | ||
| 149 | l.lwz r5,4(r1) | ||
| 150 | l.lwz r4,8(r1) | ||
| 151 | l.lwz r3,12(r1) | ||
| 152 | l.jr r9 | ||
| 153 | l.addi r1,r1,16 | ||
| 154 | .previous | ||
| 155 | |||
| 156 | .section __ex_table, "a" | ||
| 157 | .long 8b, 99b // read fault | ||
| 158 | .previous | ||
| 159 | 107 | ||
| 160 | /* | 108 | /* |
| 161 | * extern int __strnlen_user(const char *str, long len, unsigned long top); | 109 | * extern int __strnlen_user(const char *str, long len, unsigned long top); |
