aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86_64/uaccess.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86_64/uaccess.h')
-rw-r--r--include/asm-x86_64/uaccess.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/include/asm-x86_64/uaccess.h b/include/asm-x86_64/uaccess.h
index c0eac519840b..1981f70fcad1 100644
--- a/include/asm-x86_64/uaccess.h
+++ b/include/asm-x86_64/uaccess.h
@@ -37,11 +37,11 @@
37 * Uhhuh, this needs 65-bit arithmetic. We have a carry.. 37 * Uhhuh, this needs 65-bit arithmetic. We have a carry..
38 */ 38 */
39#define __range_not_ok(addr,size) ({ \ 39#define __range_not_ok(addr,size) ({ \
40 unsigned long flag,sum; \ 40 unsigned long flag,roksum; \
41 __chk_user_ptr(addr); \ 41 __chk_user_ptr(addr); \
42 asm("# range_ok\n\r" \ 42 asm("# range_ok\n\r" \
43 "addq %3,%1 ; sbbq %0,%0 ; cmpq %1,%4 ; sbbq $0,%0" \ 43 "addq %3,%1 ; sbbq %0,%0 ; cmpq %1,%4 ; sbbq $0,%0" \
44 :"=&r" (flag), "=r" (sum) \ 44 :"=&r" (flag), "=r" (roksum) \
45 :"1" (addr),"g" ((long)(size)),"g" (current_thread_info()->addr_limit.seg)); \ 45 :"1" (addr),"g" ((long)(size)),"g" (current_thread_info()->addr_limit.seg)); \
46 flag; }) 46 flag; })
47 47
@@ -367,4 +367,18 @@ __copy_to_user_inatomic(void __user *dst, const void *src, unsigned size)
367 return copy_user_generic((__force void *)dst, src, size); 367 return copy_user_generic((__force void *)dst, src, size);
368} 368}
369 369
370#define ARCH_HAS_NOCACHE_UACCESS 1
371extern long __copy_user_nocache(void *dst, const void __user *src, unsigned size, int zerorest);
372
373static inline int __copy_from_user_nocache(void *dst, const void __user *src, unsigned size)
374{
375 might_sleep();
376 return __copy_user_nocache(dst, (__force void *)src, size, 1);
377}
378
379static inline int __copy_from_user_inatomic_nocache(void *dst, const void __user *src, unsigned size)
380{
381 return __copy_user_nocache(dst, (__force void *)src, size, 0);
382}
383
370#endif /* __X86_64_UACCESS_H */ 384#endif /* __X86_64_UACCESS_H */