Lines Matching +full:x +full:- +full:size

1 /* SPDX-License-Identifier: GPL-2.0 */
15 #include <asm-generic/access_ok.h>
18 * These are the main single-value transfer routines. They automatically
19 * use the right size if we just have the right pointer type.
36 #define __put_user(x, ptr) \ argument
40 __typeof__(*(ptr)) __pu_val = (__typeof__(*(ptr)))(x); \
55 __pu_err = -EFAULT; \
61 #define put_user(x, ptr) \ argument
66 __put_user(x, _pu_addr) : -EFAULT; \
74 /* -mprefixed can generate offsets beyond range, fall back hack */
76 #define __put_user_asm_goto(x, addr, label, op) \ argument
81 : "r" (x), "b" (addr) \
85 #define __put_user_asm_goto(x, addr, label, op) \ argument
90 : "r" (x), "m<>" (*addr) \
96 #define __put_user_asm2_goto(x, ptr, label) \ argument
97 __put_user_asm_goto(x, ptr, label, "std")
99 #define __put_user_asm2_goto(x, addr, label) \ argument
106 : "r" (x), "m" (*addr) \
111 #define __put_user_size_goto(x, ptr, size, label) \ argument
115 switch (size) { \
116 case 1: __put_user_asm_goto(x, __pus_addr, label, "stb"); break; \
117 case 2: __put_user_asm_goto(x, __pus_addr, label, "sth"); break; \
118 case 4: __put_user_asm_goto(x, __pus_addr, label, "stw"); break; \
119 case 8: __put_user_asm2_goto(x, __pus_addr, label); break; \
142 : "b" (uaddr), "b" (kaddr), "i" (-EFAULT), "0" (err))
146 /* -mprefixed can generate offsets beyond range, fall back hack */
148 #define __get_user_asm_goto(x, addr, label, op) \ argument
152 : "=r" (x) \
157 #define __get_user_asm_goto(x, addr, label, op) \ argument
161 : "=r" (x) \
168 #define __get_user_asm2_goto(x, addr, label) \ argument
169 __get_user_asm_goto(x, addr, label, "ld")
171 #define __get_user_asm2_goto(x, addr, label) \ argument
177 : "=&r" (x) \
183 #define __get_user_size_goto(x, ptr, size, label) \ argument
185 BUILD_BUG_ON(size > sizeof(x)); \
186 switch (size) { \
187 case 1: __get_user_asm_goto(x, (u8 __user *)ptr, label, "lbz"); break; \
188 case 2: __get_user_asm_goto(x, (u16 __user *)ptr, label, "lhz"); break; \
189 case 4: __get_user_asm_goto(x, (u32 __user *)ptr, label, "lwz"); break; \
190 case 8: __get_user_asm2_goto(x, (u64 __user *)ptr, label); break; \
191 default: x = 0; BUILD_BUG(); \
195 #define __get_user_size_allowed(x, ptr, size, retval) \ argument
199 __get_user_size_goto(x, ptr, size, __gus_failed); \
203 x = 0; \
204 retval = -EFAULT; \
209 #define __get_user_asm(x, addr, err, op) \ argument
219 : "=r" (err), "=r" (x) \
220 : "m<>" (*addr), "i" (-EFAULT), "0" (err))
223 #define __get_user_asm2(x, addr, err) \ argument
224 __get_user_asm(x, addr, err, "ld")
226 #define __get_user_asm2(x, addr, err) \ argument
239 : "=r" (err), "=&r" (x) \
240 : "m" (*addr), "i" (-EFAULT), "0" (err))
243 #define __get_user_size_allowed(x, ptr, size, retval) \ argument
246 BUILD_BUG_ON(size > sizeof(x)); \
247 switch (size) { \
248 case 1: __get_user_asm(x, (u8 __user *)ptr, retval, "lbz"); break; \
249 case 2: __get_user_asm(x, (u16 __user *)ptr, retval, "lhz"); break; \
250 case 4: __get_user_asm(x, (u32 __user *)ptr, retval, "lwz"); break; \
251 case 8: __get_user_asm2(x, (u64 __user *)ptr, retval); break; \
252 default: x = 0; BUILD_BUG(); \
256 #define __get_user_size_goto(x, ptr, size, label) \ argument
260 __get_user_size_allowed(x, ptr, size, __gus_retval); \
271 #define __long_type(x) \ argument
272 __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
274 #define __get_user(x, ptr) \ argument
285 (x) = (__typeof__(*(ptr)))__gu_val; \
290 #define get_user(x, ptr) \ argument
295 __get_user(x, _gu_addr) : \
296 ((x) = (__force __typeof__(*(ptr)))0, -EFAULT); \
302 const void __user *from, unsigned long size);
339 unsigned long __arch_clear_user(void __user *addr, unsigned long size);
341 static inline unsigned long __clear_user(void __user *addr, unsigned long size) in __clear_user() argument
346 allow_write_to_user(addr, size); in __clear_user()
347 ret = __arch_clear_user(addr, size); in __clear_user()
348 prevent_write_to_user(addr, size); in __clear_user()
352 static inline unsigned long clear_user(void __user *addr, unsigned long size) in clear_user() argument
354 return likely(access_ok(addr, size)) ? __clear_user(addr, size) : size; in clear_user()
362 copy_mc_generic(void *to, const void *from, unsigned long size);
365 copy_mc_to_kernel(void *to, const void *from, unsigned long size) in copy_mc_to_kernel() argument
367 return copy_mc_generic(to, from, size); in copy_mc_to_kernel()
387 unsigned size);
432 #define unsafe_get_user(x, p, e) do { \ argument
437 (x) = (__typeof__(*(p)))__gu_val; \
440 #define unsafe_put_user(x, p, e) \ argument
441 __put_user_size_goto((__typeof__(*(p)))(x), (p), sizeof(*(p)), e)
450 for (_i = 0; _i < (_len & ~(sizeof(u64) - 1)); _i += sizeof(u64)) \
471 for (_i = 0; _i < (_len & ~(sizeof(u64) - 1)); _i += sizeof(u64)) \