aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2015-01-06 07:30:51 -0500
committerMichael S. Tsirkin <mst@redhat.com>2015-01-13 08:23:42 -0500
commit8ccf7b2599abd08ab3a51d5f2299e301daae0860 (patch)
tree07b1deb231b6004243afc9b59dd5591e872dcfa7 /arch/sparc
parent99408c840a87e4d1f8f9e1adc95171b9da10459e (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.h365
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) ({ \
95unsigned 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
100unsigned 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
112struct __large_struct { unsigned long buf[100]; }; 116struct __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) ({ \
116register int __pu_ret; \ 120 register int __pu_ret; \
117if (__access_ok(addr,size)) { \ 121 if (__access_ok(addr, size)) { \
118switch (size) { \ 122 switch (size) { \
119case 1: __put_user_asm(x,b,addr,__pu_ret); break; \ 123 case 1: \
120case 2: __put_user_asm(x,h,addr,__pu_ret); break; \ 124 __put_user_asm(x, b, addr, __pu_ret); \
121case 4: __put_user_asm(x,,addr,__pu_ret); break; \ 125 break; \
122case 8: __put_user_asm(x,d,addr,__pu_ret); break; \ 126 case 2: \
123default: __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); \
127register int __pu_ret; \ 131 break; \
128switch (size) { \ 132 case 8: \
129case 1: __put_user_asm(x,b,addr,__pu_ret); break; \ 133 __put_user_asm(x, d, addr, __pu_ret); \
130case 2: __put_user_asm(x,h,addr,__pu_ret); break; \ 134 break; \
131case 4: __put_user_asm(x,,addr,__pu_ret); break; \ 135 default: \
132case 8: __put_user_asm(x,d,addr,__pu_ret); break; \ 136 __pu_ret = __put_user_bad(); \
133default: __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
155int __put_user_bad(void); 186int __put_user_bad(void);
156 187
157#define __get_user_check(x,addr,size,type) ({ \ 188#define __get_user_check(x, addr, size, type) ({ \
158register int __gu_ret; \ 189 register int __gu_ret; \
159register unsigned long __gu_val; \ 190 register unsigned long __gu_val; \
160if (__access_ok(addr,size)) { \ 191 if (__access_ok(addr, size)) { \
161switch (size) { \ 192 switch (size) { \
162case 1: __get_user_asm(__gu_val,ub,addr,__gu_ret); break; \ 193 case 1: \
163case 2: __get_user_asm(__gu_val,uh,addr,__gu_ret); break; \ 194 __get_user_asm(__gu_val, ub, addr, __gu_ret); \
164case 4: __get_user_asm(__gu_val,,addr,__gu_ret); break; \ 195 break; \
165case 8: __get_user_asm(__gu_val,d,addr,__gu_ret); break; \ 196 case 2: \
166default: __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); \
170register unsigned long __gu_val __asm__ ("l1"); \ 201 break; \
171if (__access_ok(addr,size)) { \ 202 case 8: \
172switch (size) { \ 203 __get_user_asm(__gu_val, d, addr, __gu_ret); \
173case 1: __get_user_asm_ret(__gu_val,ub,addr,retval); break; \ 204 break; \
174case 2: __get_user_asm_ret(__gu_val,uh,addr,retval); break; \ 205 default: \
175case 4: __get_user_asm_ret(__gu_val,,addr,retval); break; \ 206 __gu_val = 0; \
176case 8: __get_user_asm_ret(__gu_val,d,addr,retval); break; \ 207 __gu_ret = __get_user_bad(); \
177default: 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; \
181register int __gu_ret; \ 212 __gu_ret = -EFAULT; \
182register unsigned long __gu_val; \ 213 } \
183switch (size) { \ 214 x = (__force type) __gu_val; \
184case 1: __get_user_asm(__gu_val,ub,addr,__gu_ret); break; \ 215 __gu_ret; \
185case 2: __get_user_asm(__gu_val,uh,addr,__gu_ret); break; \ 216})
186case 4: __get_user_asm(__gu_val,,addr,__gu_ret); break; \ 217
187case 8: __get_user_asm(__gu_val,d,addr,__gu_ret); break; \ 218#define __get_user_check_ret(x, addr, size, type, retval) ({ \
188default: __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: \
192register unsigned long __gu_val __asm__ ("l1"); \ 223 __get_user_asm_ret(__gu_val, ub, addr, retval); \
193switch (size) { \ 224 break; \
194case 1: __get_user_asm_ret(__gu_val,ub,addr,retval); break; \ 225 case 2: \
195case 2: __get_user_asm_ret(__gu_val,uh,addr,retval); break; \ 226 __get_user_asm_ret(__gu_val, uh, addr, retval); \
196case 4: __get_user_asm_ret(__gu_val,,addr,retval); break; \ 227 break; \
197case 8: __get_user_asm_ret(__gu_val,d,addr,retval); break; \ 228 case 4: \
198default: 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) \
222if (__builtin_constant_p(retval) && retval == -EFAULT) \ 311if (__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))); \
231else \ 320else \
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
247int __get_user_bad(void); 336int __get_user_bad(void);
248 337