Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / x86 / lib / usercopy.c
1 /*
2  * User address space access functions.
3  *
4  *  For licencing details see kernel-base/COPYING
5  */
6
7 #include <linux/highmem.h>
8 #include <linux/module.h>
9
10 #include <asm/word-at-a-time.h>
11 #include <linux/sched.h>
12
13 /*
14  * We rely on the nested NMI work to allow atomic faults from the NMI path; the
15  * nested NMI paths are careful to preserve CR2.
16  */
17 unsigned long
18 copy_from_user_nmi(void *to, const void __user *from, unsigned long n)
19 {
20         unsigned long ret;
21
22         if (__range_not_ok(from, n, TASK_SIZE))
23                 return 0;
24
25         /*
26          * Even though this function is typically called from NMI/IRQ context
27          * disable pagefaults so that its behaviour is consistent even when
28          * called form other contexts.
29          */
30         pagefault_disable();
31         ret = __copy_from_user_inatomic(to, from, n);
32         pagefault_enable();
33
34         return ret;
35 }
36 EXPORT_SYMBOL_GPL(copy_from_user_nmi);