diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2015-01-06 07:30:51 -0500 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2015-01-13 08:23:42 -0500 |
commit | 8ccf7b2599abd08ab3a51d5f2299e301daae0860 (patch) | |
tree | 07b1deb231b6004243afc9b59dd5591e872dcfa7 /arch/sparc | |
parent | 99408c840a87e4d1f8f9e1adc95171b9da10459e (diff) |
sparc32: uaccess_32 macro whitespace fixes
Macros within arch/sparc/include/asm/uaccess_32.h are made harder to
read because they violate a bunch of coding style rules.
Fix it up.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/include/asm/uaccess_32.h | 365 |
1 files changed, 227 insertions, 138 deletions
diff --git a/arch/sparc/include/asm/uaccess_32.h b/arch/sparc/include/asm/uaccess_32.h index 8b571a0db0f6..f96656209a78 100644 --- a/arch/sparc/include/asm/uaccess_32.h +++ b/arch/sparc/include/asm/uaccess_32.h | |||
@@ -37,7 +37,7 @@ | |||
37 | #define get_fs() (current->thread.current_ds) | 37 | #define get_fs() (current->thread.current_ds) |
38 | #define set_fs(val) ((current->thread.current_ds) = (val)) | 38 | #define set_fs(val) ((current->thread.current_ds) = (val)) |
39 | 39 | ||
40 | #define segment_eq(a,b) ((a).seg == (b).seg) | 40 | #define segment_eq(a, b) ((a).seg == (b).seg) |
41 | 41 | ||
42 | /* We have there a nice not-mapped page at PAGE_OFFSET - PAGE_SIZE, so that this test | 42 | /* We have there a nice not-mapped page at PAGE_OFFSET - PAGE_SIZE, so that this test |
43 | * can be fairly lightweight. | 43 | * can be fairly lightweight. |
@@ -46,8 +46,8 @@ | |||
46 | */ | 46 | */ |
47 | #define __user_ok(addr, size) ({ (void)(size); (addr) < STACK_TOP; }) | 47 | #define __user_ok(addr, size) ({ (void)(size); (addr) < STACK_TOP; }) |
48 | #define __kernel_ok (segment_eq(get_fs(), KERNEL_DS)) | 48 | #define __kernel_ok (segment_eq(get_fs(), KERNEL_DS)) |
49 | #define __access_ok(addr,size) (__user_ok((addr) & get_fs().seg,(size))) | 49 | #define __access_ok(addr, size) (__user_ok((addr) & get_fs().seg, (size))) |
50 | #define access_ok(type, addr, size) \ | 50 | #define access_ok(type, addr, size) \ |
51 | ({ (void)(type); __access_ok((unsigned long)(addr), size); }) | 51 | ({ (void)(type); __access_ok((unsigned long)(addr), size); }) |
52 | 52 | ||
53 | /* | 53 | /* |
@@ -91,158 +91,247 @@ void __ret_efault(void); | |||
91 | * of a performance impact. Thus we have a few rather ugly macros here, | 91 | * of a performance impact. Thus we have a few rather ugly macros here, |
92 | * and hide all the ugliness from the user. | 92 | * and hide all the ugliness from the user. |
93 | */ | 93 | */ |
94 | #define put_user(x,ptr) ({ \ | 94 | #define put_user(x, ptr) ({ \ |
95 | unsigned long __pu_addr = (unsigned long)(ptr); \ | 95 | unsigned long __pu_addr = (unsigned long)(ptr); \ |
96 | __chk_user_ptr(ptr); \ | 96 | __chk_user_ptr(ptr); \ |
97 | __put_user_check((__typeof__(*(ptr)))(x),__pu_addr,sizeof(*(ptr))); }) | 97 | __put_user_check((__typeof__(*(ptr)))(x), __pu_addr, sizeof(*(ptr))); \ |
98 | 98 | }) | |
99 | #define get_user(x,ptr) ({ \ | 99 | |
100 | unsigned long __gu_addr = (unsigned long)(ptr); \ | 100 | #define get_user(x, ptr) ({ \ |
101 | __chk_user_ptr(ptr); \ | 101 | unsigned long __gu_addr = (unsigned long)(ptr); \ |
102 | __get_user_check((x),__gu_addr,sizeof(*(ptr)),__typeof__(*(ptr))); }) | 102 | __chk_user_ptr(ptr); \ |
103 | __get_user_check((x), __gu_addr, sizeof(*(ptr)), __typeof__(*(ptr))); \ | ||
104 | }) | ||
103 | 105 | ||
104 | /* | 106 | /* |
105 | * The "__xxx" versions do not do address space checking, useful when | 107 | * The "__xxx" versions do not do address space checking, useful when |
106 | * doing multiple accesses to the same area (the user has to do the | 108 | * doing multiple accesses to the same area (the user has to do the |
107 | * checks by hand with "access_ok()") | 109 | * checks by hand with "access_ok()") |
108 | */ | 110 | */ |
109 | #define __put_user(x,ptr) __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) | 111 | #define __put_user(x, ptr) \ |
110 | #define __get_user(x,ptr) __get_user_nocheck((x),(ptr),sizeof(*(ptr)),__typeof__(*(ptr))) | 112 | __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) |
113 | #define __get_user(x, ptr) \ | ||
114 | __get_user_nocheck((x), (ptr), sizeof(*(ptr)), __typeof__(*(ptr))) | ||
111 | 115 | ||
112 | struct __large_struct { unsigned long buf[100]; }; | 116 | struct __large_struct { unsigned long buf[100]; }; |
113 | #define __m(x) ((struct __large_struct __user *)(x)) | 117 | #define __m(x) ((struct __large_struct __user *)(x)) |
114 | 118 | ||
115 | #define __put_user_check(x,addr,size) ({ \ | 119 | #define __put_user_check(x, addr, size) ({ \ |
116 | register int __pu_ret; \ | 120 | register int __pu_ret; \ |
117 | if (__access_ok(addr,size)) { \ | 121 | if (__access_ok(addr, size)) { \ |
118 | switch (size) { \ | 122 | switch (size) { \ |
119 | case 1: __put_user_asm(x,b,addr,__pu_ret); break; \ | 123 | case 1: \ |
120 | case 2: __put_user_asm(x,h,addr,__pu_ret); break; \ | 124 | __put_user_asm(x, b, addr, __pu_ret); \ |
121 | case 4: __put_user_asm(x,,addr,__pu_ret); break; \ | 125 | break; \ |
122 | case 8: __put_user_asm(x,d,addr,__pu_ret); break; \ | 126 | case 2: \ |
123 | default: __pu_ret = __put_user_bad(); break; \ | 127 | __put_user_asm(x, h, addr, __pu_ret); \ |
124 | } } else { __pu_ret = -EFAULT; } __pu_ret; }) | 128 | break; \ |
125 | 129 | case 4: \ | |
126 | #define __put_user_nocheck(x,addr,size) ({ \ | 130 | __put_user_asm(x, , addr, __pu_ret); \ |
127 | register int __pu_ret; \ | 131 | break; \ |
128 | switch (size) { \ | 132 | case 8: \ |
129 | case 1: __put_user_asm(x,b,addr,__pu_ret); break; \ | 133 | __put_user_asm(x, d, addr, __pu_ret); \ |
130 | case 2: __put_user_asm(x,h,addr,__pu_ret); break; \ | 134 | break; \ |
131 | case 4: __put_user_asm(x,,addr,__pu_ret); break; \ | 135 | default: \ |
132 | case 8: __put_user_asm(x,d,addr,__pu_ret); break; \ | 136 | __pu_ret = __put_user_bad(); \ |
133 | default: __pu_ret = __put_user_bad(); break; \ | 137 | break; \ |
134 | } __pu_ret; }) | 138 | } \ |
135 | 139 | } else { \ | |
136 | #define __put_user_asm(x,size,addr,ret) \ | 140 | __pu_ret = -EFAULT; \ |
141 | } \ | ||
142 | __pu_ret; \ | ||
143 | }) | ||
144 | |||
145 | #define __put_user_nocheck(x, addr, size) ({ \ | ||
146 | register int __pu_ret; \ | ||
147 | switch (size) { \ | ||
148 | case 1: \ | ||
149 | __put_user_asm(x, b, addr, __pu_ret); \ | ||
150 | break; \ | ||
151 | case 2: \ | ||
152 | __put_user_asm(x, h, addr, __pu_ret); \ | ||
153 | break; \ | ||
154 | case 4: \ | ||
155 | __put_user_asm(x, , addr, __pu_ret); \ | ||
156 | break; \ | ||
157 | case 8: \ | ||
158 | __put_user_asm(x, d, addr, __pu_ret); \ | ||
159 | break; \ | ||
160 | default: \ | ||
161 | __pu_ret = __put_user_bad(); \ | ||
162 | break; \ | ||
163 | } \ | ||
164 | __pu_ret; \ | ||
165 | }) | ||
166 | |||
167 | #define __put_user_asm(x, size, addr, ret) \ | ||
137 | __asm__ __volatile__( \ | 168 | __asm__ __volatile__( \ |
138 | "/* Put user asm, inline. */\n" \ | 169 | "/* Put user asm, inline. */\n" \ |
139 | "1:\t" "st"#size " %1, %2\n\t" \ | 170 | "1:\t" "st"#size " %1, %2\n\t" \ |
140 | "clr %0\n" \ | 171 | "clr %0\n" \ |
141 | "2:\n\n\t" \ | 172 | "2:\n\n\t" \ |
142 | ".section .fixup,#alloc,#execinstr\n\t" \ | 173 | ".section .fixup,#alloc,#execinstr\n\t" \ |
143 | ".align 4\n" \ | 174 | ".align 4\n" \ |
144 | "3:\n\t" \ | 175 | "3:\n\t" \ |
145 | "b 2b\n\t" \ | 176 | "b 2b\n\t" \ |
146 | " mov %3, %0\n\t" \ | 177 | " mov %3, %0\n\t" \ |
147 | ".previous\n\n\t" \ | 178 | ".previous\n\n\t" \ |
148 | ".section __ex_table,#alloc\n\t" \ | 179 | ".section __ex_table,#alloc\n\t" \ |
149 | ".align 4\n\t" \ | 180 | ".align 4\n\t" \ |
150 | ".word 1b, 3b\n\t" \ | 181 | ".word 1b, 3b\n\t" \ |
151 | ".previous\n\n\t" \ | 182 | ".previous\n\n\t" \ |
152 | : "=&r" (ret) : "r" (x), "m" (*__m(addr)), \ | 183 | : "=&r" (ret) : "r" (x), "m" (*__m(addr)), \ |
153 | "i" (-EFAULT)) | 184 | "i" (-EFAULT)) |
154 | 185 | ||
155 | int __put_user_bad(void); | 186 | int __put_user_bad(void); |
156 | 187 | ||
157 | #define __get_user_check(x,addr,size,type) ({ \ | 188 | #define __get_user_check(x, addr, size, type) ({ \ |
158 | register int __gu_ret; \ | 189 | register int __gu_ret; \ |
159 | register unsigned long __gu_val; \ | 190 | register unsigned long __gu_val; \ |
160 | if (__access_ok(addr,size)) { \ | 191 | if (__access_ok(addr, size)) { \ |
161 | switch (size) { \ | 192 | switch (size) { \ |
162 | case 1: __get_user_asm(__gu_val,ub,addr,__gu_ret); break; \ | 193 | case 1: \ |
163 | case 2: __get_user_asm(__gu_val,uh,addr,__gu_ret); break; \ | 194 | __get_user_asm(__gu_val, ub, addr, __gu_ret); \ |
164 | case 4: __get_user_asm(__gu_val,,addr,__gu_ret); break; \ | 195 | break; \ |
165 | case 8: __get_user_asm(__gu_val,d,addr,__gu_ret); break; \ | 196 | case 2: \ |
166 | default: __gu_val = 0; __gu_ret = __get_user_bad(); break; \ | 197 | __get_user_asm(__gu_val, uh, addr, __gu_ret); \ |
167 | } } else { __gu_val = 0; __gu_ret = -EFAULT; } x = (__force type) __gu_val; __gu_ret; }) | 198 | break; \ |
168 | 199 | case 4: \ | |
169 | #define __get_user_check_ret(x,addr,size,type,retval) ({ \ | 200 | __get_user_asm(__gu_val, , addr, __gu_ret); \ |
170 | register unsigned long __gu_val __asm__ ("l1"); \ | 201 | break; \ |
171 | if (__access_ok(addr,size)) { \ | 202 | case 8: \ |
172 | switch (size) { \ | 203 | __get_user_asm(__gu_val, d, addr, __gu_ret); \ |
173 | case 1: __get_user_asm_ret(__gu_val,ub,addr,retval); break; \ | 204 | break; \ |
174 | case 2: __get_user_asm_ret(__gu_val,uh,addr,retval); break; \ | 205 | default: \ |
175 | case 4: __get_user_asm_ret(__gu_val,,addr,retval); break; \ | 206 | __gu_val = 0; \ |
176 | case 8: __get_user_asm_ret(__gu_val,d,addr,retval); break; \ | 207 | __gu_ret = __get_user_bad(); \ |
177 | default: if (__get_user_bad()) return retval; \ | 208 | break; \ |
178 | } x = (__force type) __gu_val; } else return retval; }) | 209 | } \ |
179 | 210 | } else { \ | |
180 | #define __get_user_nocheck(x,addr,size,type) ({ \ | 211 | __gu_val = 0; \ |
181 | register int __gu_ret; \ | 212 | __gu_ret = -EFAULT; \ |
182 | register unsigned long __gu_val; \ | 213 | } \ |
183 | switch (size) { \ | 214 | x = (__force type) __gu_val; \ |
184 | case 1: __get_user_asm(__gu_val,ub,addr,__gu_ret); break; \ | 215 | __gu_ret; \ |
185 | case 2: __get_user_asm(__gu_val,uh,addr,__gu_ret); break; \ | 216 | }) |
186 | case 4: __get_user_asm(__gu_val,,addr,__gu_ret); break; \ | 217 | |
187 | case 8: __get_user_asm(__gu_val,d,addr,__gu_ret); break; \ | 218 | #define __get_user_check_ret(x, addr, size, type, retval) ({ \ |
188 | default: __gu_val = 0; __gu_ret = __get_user_bad(); break; \ | 219 | register unsigned long __gu_val __asm__ ("l1"); \ |
189 | } x = (__force type) __gu_val; __gu_ret; }) | 220 | if (__access_ok(addr, size)) { \ |
190 | 221 | switch (size) { \ | |
191 | #define __get_user_nocheck_ret(x,addr,size,type,retval) ({ \ | 222 | case 1: \ |
192 | register unsigned long __gu_val __asm__ ("l1"); \ | 223 | __get_user_asm_ret(__gu_val, ub, addr, retval); \ |
193 | switch (size) { \ | 224 | break; \ |
194 | case 1: __get_user_asm_ret(__gu_val,ub,addr,retval); break; \ | 225 | case 2: \ |
195 | case 2: __get_user_asm_ret(__gu_val,uh,addr,retval); break; \ | 226 | __get_user_asm_ret(__gu_val, uh, addr, retval); \ |
196 | case 4: __get_user_asm_ret(__gu_val,,addr,retval); break; \ | 227 | break; \ |
197 | case 8: __get_user_asm_ret(__gu_val,d,addr,retval); break; \ | 228 | case 4: \ |
198 | default: if (__get_user_bad()) return retval; \ | 229 | __get_user_asm_ret(__gu_val, , addr, retval); \ |
199 | } x = (__force type) __gu_val; }) | 230 | break; \ |
200 | 231 | case 8: \ | |
201 | #define __get_user_asm(x,size,addr,ret) \ | 232 | __get_user_asm_ret(__gu_val, d, addr, retval); \ |
233 | break; \ | ||
234 | default: \ | ||
235 | if (__get_user_bad()) \ | ||
236 | return retval; \ | ||
237 | } \ | ||
238 | x = (__force type) __gu_val; \ | ||
239 | } else \ | ||
240 | return retval; \ | ||
241 | }) | ||
242 | |||
243 | #define __get_user_nocheck(x, addr, size, type) ({ \ | ||
244 | register int __gu_ret; \ | ||
245 | register unsigned long __gu_val; \ | ||
246 | switch (size) { \ | ||
247 | case 1: \ | ||
248 | __get_user_asm(__gu_val, ub, addr, __gu_ret); \ | ||
249 | break; \ | ||
250 | case 2: \ | ||
251 | __get_user_asm(__gu_val, uh, addr, __gu_ret); \ | ||
252 | break; \ | ||
253 | case 4: \ | ||
254 | __get_user_asm(__gu_val, , addr, __gu_ret); \ | ||
255 | break; \ | ||
256 | case 8: \ | ||
257 | __get_user_asm(__gu_val, d, addr, __gu_ret); \ | ||
258 | break; \ | ||
259 | default: \ | ||
260 | __gu_val = 0; \ | ||
261 | __gu_ret = __get_user_bad(); \ | ||
262 | break; \ | ||
263 | } \ | ||
264 | x = (__force type) __gu_val; \ | ||
265 | __gu_ret; \ | ||
266 | }) | ||
267 | |||
268 | #define __get_user_nocheck_ret(x, addr, size, type, retval) ({ \ | ||
269 | register unsigned long __gu_val __asm__ ("l1"); \ | ||
270 | switch (size) { \ | ||
271 | case 1: \ | ||
272 | __get_user_asm_ret(__gu_val, ub, addr, retval); \ | ||
273 | break; \ | ||
274 | case 2: \ | ||
275 | __get_user_asm_ret(__gu_val, uh, addr, retval); \ | ||
276 | break; \ | ||
277 | case 4: \ | ||
278 | __get_user_asm_ret(__gu_val, , addr, retval); \ | ||
279 | break; \ | ||
280 | case 8: \ | ||
281 | __get_user_asm_ret(__gu_val, d, addr, retval); \ | ||
282 | break; \ | ||
283 | default: \ | ||
284 | if (__get_user_bad()) \ | ||
285 | return retval; \ | ||
286 | } \ | ||
287 | x = (__force type) __gu_val; \ | ||
288 | }) | ||
289 | |||
290 | #define __get_user_asm(x, size, addr, ret) \ | ||
202 | __asm__ __volatile__( \ | 291 | __asm__ __volatile__( \ |
203 | "/* Get user asm, inline. */\n" \ | 292 | "/* Get user asm, inline. */\n" \ |
204 | "1:\t" "ld"#size " %2, %1\n\t" \ | 293 | "1:\t" "ld"#size " %2, %1\n\t" \ |
205 | "clr %0\n" \ | 294 | "clr %0\n" \ |
206 | "2:\n\n\t" \ | 295 | "2:\n\n\t" \ |
207 | ".section .fixup,#alloc,#execinstr\n\t" \ | 296 | ".section .fixup,#alloc,#execinstr\n\t" \ |
208 | ".align 4\n" \ | 297 | ".align 4\n" \ |
209 | "3:\n\t" \ | 298 | "3:\n\t" \ |
210 | "clr %1\n\t" \ | 299 | "clr %1\n\t" \ |
211 | "b 2b\n\t" \ | 300 | "b 2b\n\t" \ |
212 | " mov %3, %0\n\n\t" \ | 301 | " mov %3, %0\n\n\t" \ |
213 | ".previous\n\t" \ | 302 | ".previous\n\t" \ |
214 | ".section __ex_table,#alloc\n\t" \ | 303 | ".section __ex_table,#alloc\n\t" \ |
215 | ".align 4\n\t" \ | 304 | ".align 4\n\t" \ |
216 | ".word 1b, 3b\n\n\t" \ | 305 | ".word 1b, 3b\n\n\t" \ |
217 | ".previous\n\t" \ | 306 | ".previous\n\t" \ |
218 | : "=&r" (ret), "=&r" (x) : "m" (*__m(addr)), \ | 307 | : "=&r" (ret), "=&r" (x) : "m" (*__m(addr)), \ |
219 | "i" (-EFAULT)) | 308 | "i" (-EFAULT)) |
220 | 309 | ||
221 | #define __get_user_asm_ret(x,size,addr,retval) \ | 310 | #define __get_user_asm_ret(x, size, addr, retval) \ |
222 | if (__builtin_constant_p(retval) && retval == -EFAULT) \ | 311 | if (__builtin_constant_p(retval) && retval == -EFAULT) \ |
223 | __asm__ __volatile__( \ | 312 | __asm__ __volatile__( \ |
224 | "/* Get user asm ret, inline. */\n" \ | 313 | "/* Get user asm ret, inline. */\n" \ |
225 | "1:\t" "ld"#size " %1, %0\n\n\t" \ | 314 | "1:\t" "ld"#size " %1, %0\n\n\t" \ |
226 | ".section __ex_table,#alloc\n\t" \ | 315 | ".section __ex_table,#alloc\n\t" \ |
227 | ".align 4\n\t" \ | 316 | ".align 4\n\t" \ |
228 | ".word 1b,__ret_efault\n\n\t" \ | 317 | ".word 1b,__ret_efault\n\n\t" \ |
229 | ".previous\n\t" \ | 318 | ".previous\n\t" \ |
230 | : "=&r" (x) : "m" (*__m(addr))); \ | 319 | : "=&r" (x) : "m" (*__m(addr))); \ |
231 | else \ | 320 | else \ |
232 | __asm__ __volatile__( \ | 321 | __asm__ __volatile__( \ |
233 | "/* Get user asm ret, inline. */\n" \ | 322 | "/* Get user asm ret, inline. */\n" \ |
234 | "1:\t" "ld"#size " %1, %0\n\n\t" \ | 323 | "1:\t" "ld"#size " %1, %0\n\n\t" \ |
235 | ".section .fixup,#alloc,#execinstr\n\t" \ | 324 | ".section .fixup,#alloc,#execinstr\n\t" \ |
236 | ".align 4\n" \ | 325 | ".align 4\n" \ |
237 | "3:\n\t" \ | 326 | "3:\n\t" \ |
238 | "ret\n\t" \ | 327 | "ret\n\t" \ |
239 | " restore %%g0, %2, %%o0\n\n\t" \ | 328 | " restore %%g0, %2, %%o0\n\n\t" \ |
240 | ".previous\n\t" \ | 329 | ".previous\n\t" \ |
241 | ".section __ex_table,#alloc\n\t" \ | 330 | ".section __ex_table,#alloc\n\t" \ |
242 | ".align 4\n\t" \ | 331 | ".align 4\n\t" \ |
243 | ".word 1b, 3b\n\n\t" \ | 332 | ".word 1b, 3b\n\n\t" \ |
244 | ".previous\n\t" \ | 333 | ".previous\n\t" \ |
245 | : "=&r" (x) : "m" (*__m(addr)), "i" (retval)) | 334 | : "=&r" (x) : "m" (*__m(addr)), "i" (retval)) |
246 | 335 | ||
247 | int __get_user_bad(void); | 336 | int __get_user_bad(void); |
248 | 337 | ||