diff options
Diffstat (limited to 'kernel/compat.c')
-rw-r--r-- | kernel/compat.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/kernel/compat.c b/kernel/compat.c index c1601a84f8d8..ccea93e28954 100644 --- a/kernel/compat.c +++ b/kernel/compat.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/unistd.h> | 21 | #include <linux/unistd.h> |
22 | #include <linux/security.h> | 22 | #include <linux/security.h> |
23 | #include <linux/timex.h> | 23 | #include <linux/timex.h> |
24 | #include <linux/migrate.h> | ||
24 | 25 | ||
25 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
26 | 27 | ||
@@ -934,3 +935,25 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp) | |||
934 | 935 | ||
935 | return ret; | 936 | return ret; |
936 | } | 937 | } |
938 | |||
939 | #ifdef CONFIG_NUMA | ||
940 | asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages, | ||
941 | void __user *pages32, | ||
942 | const int __user *nodes, | ||
943 | int __user *status, | ||
944 | int flags) | ||
945 | { | ||
946 | const void __user * __user *pages; | ||
947 | int i; | ||
948 | |||
949 | pages = compat_alloc_user_space(nr_pages * sizeof(void *)); | ||
950 | for (i = 0; i < nr_pages; i++) { | ||
951 | compat_uptr_t p; | ||
952 | |||
953 | if (get_user(p, (compat_uptr_t *)(pages32 + i)) || | ||
954 | put_user(compat_ptr(p), pages + i)) | ||
955 | return -EFAULT; | ||
956 | } | ||
957 | return sys_move_pages(pid, nr_pages, pages, nodes, status, flags); | ||
958 | } | ||
959 | #endif | ||