[PATCH] Create compat_sys_migrate_pages
This is needed on bigendian 64bit architectures. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Acked-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
1f6f61649d
commit
3fd5939798
3 changed files with 38 additions and 0 deletions
|
@ -230,5 +230,9 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
|
||||||
extern int compat_printk(const char *fmt, ...);
|
extern int compat_printk(const char *fmt, ...);
|
||||||
extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat);
|
extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat);
|
||||||
|
|
||||||
|
asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
|
||||||
|
compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
|
||||||
|
const compat_ulong_t __user *new_nodes);
|
||||||
|
|
||||||
#endif /* CONFIG_COMPAT */
|
#endif /* CONFIG_COMPAT */
|
||||||
#endif /* _LINUX_COMPAT_H */
|
#endif /* _LINUX_COMPAT_H */
|
||||||
|
|
|
@ -982,4 +982,37 @@ asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages,
|
||||||
}
|
}
|
||||||
return sys_move_pages(pid, nr_pages, pages, nodes, status, flags);
|
return sys_move_pages(pid, nr_pages, pages, nodes, status, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
|
||||||
|
compat_ulong_t maxnode,
|
||||||
|
const compat_ulong_t __user *old_nodes,
|
||||||
|
const compat_ulong_t __user *new_nodes)
|
||||||
|
{
|
||||||
|
unsigned long __user *old = NULL;
|
||||||
|
unsigned long __user *new = NULL;
|
||||||
|
nodemask_t tmp_mask;
|
||||||
|
unsigned long nr_bits;
|
||||||
|
unsigned long size;
|
||||||
|
|
||||||
|
nr_bits = min_t(unsigned long, maxnode - 1, MAX_NUMNODES);
|
||||||
|
size = ALIGN(nr_bits, BITS_PER_LONG) / 8;
|
||||||
|
if (old_nodes) {
|
||||||
|
if (compat_get_bitmap(nodes_addr(tmp_mask), old_nodes, nr_bits))
|
||||||
|
return -EFAULT;
|
||||||
|
old = compat_alloc_user_space(new_nodes ? size * 2 : size);
|
||||||
|
if (new_nodes)
|
||||||
|
new = old + size / sizeof(unsigned long);
|
||||||
|
if (copy_to_user(old, nodes_addr(tmp_mask), size))
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
if (new_nodes) {
|
||||||
|
if (compat_get_bitmap(nodes_addr(tmp_mask), new_nodes, nr_bits))
|
||||||
|
return -EFAULT;
|
||||||
|
if (new == NULL)
|
||||||
|
new = compat_alloc_user_space(size);
|
||||||
|
if (copy_to_user(new, nodes_addr(tmp_mask), size))
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
return sys_migrate_pages(pid, nr_bits + 1, old, new);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -135,6 +135,7 @@ cond_syscall(sys_madvise);
|
||||||
cond_syscall(sys_mremap);
|
cond_syscall(sys_mremap);
|
||||||
cond_syscall(sys_remap_file_pages);
|
cond_syscall(sys_remap_file_pages);
|
||||||
cond_syscall(compat_sys_move_pages);
|
cond_syscall(compat_sys_move_pages);
|
||||||
|
cond_syscall(compat_sys_migrate_pages);
|
||||||
|
|
||||||
/* block-layer dependent */
|
/* block-layer dependent */
|
||||||
cond_syscall(sys_bdflush);
|
cond_syscall(sys_bdflush);
|
||||||
|
|
Loading…
Reference in a new issue