Index: linux-2.6.15-rc1-mm2/mm/mempolicy.c =================================================================== --- linux-2.6.15-rc1-mm2.orig/mm/mempolicy.c 2005-11-21 13:19:15.000000000 -0800 +++ linux-2.6.15-rc1-mm2/mm/mempolicy.c 2005-11-22 17:29:06.000000000 -0800 @@ -587,6 +587,7 @@ static int swap_pages(struct list_head * * Returns the number of page that could not be moved. */ int do_migrate_pages(struct mm_struct *mm, + unsigned long start, unsigned long end, const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags) { LIST_HEAD(pagelist); @@ -596,7 +597,7 @@ int do_migrate_pages(struct mm_struct *m nodes_andnot(nodes, *from_nodes, *to_nodes); down_read(&mm->mmap_sem); - check_range(mm, mm->mmap->vm_start, TASK_SIZE, &nodes, + check_range(mm, start, end, &nodes, flags | MPOL_MF_DISCONTIG_OK, &pagelist); if (!list_empty(&pagelist)) { @@ -776,7 +777,9 @@ asmlinkage long sys_set_mempolicy(int mo /* Macro needed until Paul implements this function in kernel/cpusets.c */ #define cpuset_mems_allowed(task) node_online_map -asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode, +asmlinkage long sys_migrate_pages(pid_t pid, + unsigned long start, unsigned long end, + unsigned long maxnode, const unsigned long __user *old_nodes, const unsigned long __user *new_nodes) { @@ -828,7 +831,10 @@ asmlinkage long sys_migrate_pages(pid_t goto out; } - err = do_migrate_pages(mm, &old, &new, MPOL_MF_MOVE); + if (!end) + end = TASK_SIZE; + + err = do_migrate_pages(mm, start, end, &old, &new, MPOL_MF_MOVE); out: mmput(mm); return err; Index: linux-2.6.15-rc1-mm2/include/linux/mempolicy.h =================================================================== --- linux-2.6.15-rc1-mm2.orig/include/linux/mempolicy.h 2005-11-21 13:17:58.000000000 -0800 +++ linux-2.6.15-rc1-mm2/include/linux/mempolicy.h 2005-11-22 17:28:23.000000000 -0800 @@ -153,6 +153,7 @@ extern struct zonelist *huge_zonelist(st extern unsigned slab_node(struct mempolicy *policy); int do_migrate_pages(struct mm_struct *mm, + unsigned long start, unsigned long end, const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags); #else Index: linux-2.6.15-rc1-mm2/kernel/cpuset.c =================================================================== --- linux-2.6.15-rc1-mm2.orig/kernel/cpuset.c 2005-11-21 12:11:07.000000000 -0800 +++ linux-2.6.15-rc1-mm2/kernel/cpuset.c 2005-11-22 17:29:44.000000000 -0800 @@ -677,7 +677,7 @@ static void refresh_mems(void) if (!nodes_equal(oldmem, current->mems_allowed)) { numa_policy_rebind(&oldmem, ¤t->mems_allowed); if (migrate) { - do_migrate_pages(current->mm, &oldmem, + do_migrate_pages(current->mm, 0, TASK_SIZE, &oldmem, ¤t->mems_allowed, MPOL_MF_MOVE_ALL); } @@ -1093,7 +1093,7 @@ static int attach_task(struct cpuset *cs up(&callback_sem); if (is_memory_migrate(cs)) - do_migrate_pages(tsk->mm, &from, &to, MPOL_MF_MOVE_ALL); + do_migrate_pages(tsk->mm, 0, TASK_SIZE, &from, &to, MPOL_MF_MOVE_ALL); put_task_struct(tsk); if (atomic_dec_and_test(&oldcs->count)) check_for_release(oldcs, ppathbuf);