Blame view
include/linux/uaccess.h
3.37 KB
c22ce143d [PATCH] x86: cach... |
1 2 |
#ifndef __LINUX_UACCESS_H__ #define __LINUX_UACCESS_H__ |
a866374ae [PATCH] mm: pagef... |
3 |
#include <linux/preempt.h> |
c22ce143d [PATCH] x86: cach... |
4 |
#include <asm/uaccess.h> |
a866374ae [PATCH] mm: pagef... |
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/* * These routines enable/disable the pagefault handler in that * it will not take any locks and go straight to the fixup table. * * They have great resemblance to the preempt_disable/enable calls * and in fact they are identical; this is because currently there is * no other way to make the pagefault handlers do this. So we do * disable preemption but we don't necessarily care about that. */ static inline void pagefault_disable(void) { inc_preempt_count(); /* * make sure to have issued the store before a pagefault * can hit. */ barrier(); } static inline void pagefault_enable(void) { /* * make sure to issue those last loads/stores before enabling * the pagefault handler again. */ barrier(); dec_preempt_count(); /* * make sure we do.. */ barrier(); preempt_check_resched(); } |
c22ce143d [PATCH] x86: cach... |
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#ifndef ARCH_HAS_NOCACHE_UACCESS static inline unsigned long __copy_from_user_inatomic_nocache(void *to, const void __user *from, unsigned long n) { return __copy_from_user_inatomic(to, from, n); } static inline unsigned long __copy_from_user_nocache(void *to, const void __user *from, unsigned long n) { return __copy_from_user(to, from, n); } #endif /* ARCH_HAS_NOCACHE_UACCESS */ |
1b79e5513 [PATCH] add probe... |
53 54 55 56 57 58 59 60 61 62 63 |
/** * probe_kernel_address(): safely attempt to read from a location * @addr: address to read from - its type is type typeof(retval)* * @retval: read into this variable * * Safely read from address @addr into variable @revtal. If a kernel fault * happens, handle that and return -EFAULT. * We ensure that the __get_user() is executed in atomic context so that * do_page_fault() doesn't attempt to take mmap_sem. This makes * probe_kernel_address() suitable for use within regions where the caller * already holds mmap_sem, or other locks which nest inside mmap_sem. |
20aa7b21b [PATCH] probe_ker... |
64 65 66 67 68 |
* This must be a macro because __get_user() needs to know the types of the * args. * * We don't include enough header files to be able to do the set_fs(). We * require that the probe_kernel_address() caller will do that. |
1b79e5513 [PATCH] add probe... |
69 70 71 72 |
*/ #define probe_kernel_address(addr, retval) \ ({ \ long ret; \ |
20aa7b21b [PATCH] probe_ker... |
73 |
mm_segment_t old_fs = get_fs(); \ |
1b79e5513 [PATCH] add probe... |
74 |
\ |
20aa7b21b [PATCH] probe_ker... |
75 |
set_fs(KERNEL_DS); \ |
a866374ae [PATCH] mm: pagef... |
76 |
pagefault_disable(); \ |
fb71e4533 uaccess: fix para... |
77 |
ret = __copy_from_user_inatomic(&(retval), (__force typeof(retval) __user *)(addr), sizeof(retval)); \ |
a866374ae [PATCH] mm: pagef... |
78 |
pagefault_enable(); \ |
20aa7b21b [PATCH] probe_ker... |
79 |
set_fs(old_fs); \ |
1b79e5513 [PATCH] add probe... |
80 81 |
ret; \ }) |
c33fa9f56 uaccess: add prob... |
82 83 84 85 86 87 88 89 90 |
/* * probe_kernel_read(): safely attempt to read from a location * @dst: pointer to the buffer that shall take the data * @src: address to read from * @size: size of the data chunk * * Safely read from address @src to the buffer at @dst. If a kernel fault * happens, handle that and return -EFAULT. */ |
f29c50419 maccess,probe_ker... |
91 92 |
extern long probe_kernel_read(void *dst, const void *src, size_t size); extern long __probe_kernel_read(void *dst, const void *src, size_t size); |
c33fa9f56 uaccess: add prob... |
93 94 95 96 97 98 99 100 101 102 |
/* * probe_kernel_write(): safely attempt to write to a location * @dst: address to write to * @src: pointer to the data that shall be written * @size: size of the data chunk * * Safely write to address @dst from the buffer at @src. If a kernel fault * happens, handle that and return -EFAULT. */ |
f29c50419 maccess,probe_ker... |
103 104 |
extern long notrace probe_kernel_write(void *dst, const void *src, size_t size); extern long notrace __probe_kernel_write(void *dst, const void *src, size_t size); |
c33fa9f56 uaccess: add prob... |
105 |
|
c22ce143d [PATCH] x86: cach... |
106 |
#endif /* __LINUX_UACCESS_H__ */ |