mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[PATCH] sys_move_pages: 32bit support (i386, x86_64)
sys_move_pages() support for 32bit (i386 plus x86_64 compat layer) Add support for move_pages() on i386 and also add the compat functions necessary to run 32 bit binaries on x86_64. Add compat_sys_move_pages to the x86_64 32bit binary layer. Note that it is not up to date so I added the missing pieces. Not sure if this is done the right way. [akpm@osdl.org: compile fix] Signed-off-by: Christoph Lameter <clameter@sgi.com> Cc: Andi Kleen <ak@muc.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
b63d64a324
commit
1b2db9fb7a
6 changed files with 33 additions and 1 deletions
|
@ -316,3 +316,4 @@ ENTRY(sys_call_table)
|
|||
.long sys_sync_file_range
|
||||
.long sys_tee /* 315 */
|
||||
.long sys_vmsplice
|
||||
.long sys_move_pages
|
||||
|
|
|
@ -696,4 +696,5 @@ ia32_sys_call_table:
|
|||
.quad sys_sync_file_range
|
||||
.quad sys_tee
|
||||
.quad compat_sys_vmsplice
|
||||
.quad compat_sys_move_pages
|
||||
ia32_syscall_end:
|
||||
|
|
|
@ -322,10 +322,11 @@
|
|||
#define __NR_sync_file_range 314
|
||||
#define __NR_tee 315
|
||||
#define __NR_vmsplice 316
|
||||
#define __NR_move_pages 317
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define NR_syscalls 317
|
||||
#define NR_syscalls 318
|
||||
|
||||
/*
|
||||
* user-visible error numbers are in the range -1 - -128: see
|
||||
|
|
|
@ -521,6 +521,11 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,
|
|||
const int __user *nodes,
|
||||
int __user *status,
|
||||
int flags);
|
||||
asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page,
|
||||
void __user *pages,
|
||||
const int __user *nodes,
|
||||
int __user *status,
|
||||
int flags);
|
||||
asmlinkage long sys_mbind(unsigned long start, unsigned long len,
|
||||
unsigned long mode,
|
||||
unsigned long __user *nmask,
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/unistd.h>
|
||||
#include <linux/security.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/migrate.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
|
@ -934,3 +935,25 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages,
|
||||
void __user *pages32,
|
||||
const int __user *nodes,
|
||||
int __user *status,
|
||||
int flags)
|
||||
{
|
||||
const void __user * __user *pages;
|
||||
int i;
|
||||
|
||||
pages = compat_alloc_user_space(nr_pages * sizeof(void *));
|
||||
for (i = 0; i < nr_pages; i++) {
|
||||
compat_uptr_t p;
|
||||
|
||||
if (get_user(p, (compat_uptr_t *)(pages32 + i)) ||
|
||||
put_user(compat_ptr(p), pages + i))
|
||||
return -EFAULT;
|
||||
}
|
||||
return sys_move_pages(pid, nr_pages, pages, nodes, status, flags);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -133,3 +133,4 @@ cond_syscall(sys_mincore);
|
|||
cond_syscall(sys_madvise);
|
||||
cond_syscall(sys_mremap);
|
||||
cond_syscall(sys_remap_file_pages);
|
||||
cond_syscall(compat_sys_move_pages);
|
||||
|
|
Loading…
Reference in a new issue