aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mempolicy.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r--mm/mempolicy.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 3a45b7dd0a09..ccbdb22147bb 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -526,8 +526,18 @@ long do_get_mempolicy(int *policy, nodemask_t *nmask,
526 struct mempolicy *pol = current->mempolicy; 526 struct mempolicy *pol = current->mempolicy;
527 527
528 cpuset_update_task_memory_state(); 528 cpuset_update_task_memory_state();
529 if (flags & ~(unsigned long)(MPOL_F_NODE|MPOL_F_ADDR)) 529 if (flags &
530 ~(unsigned long)(MPOL_F_NODE|MPOL_F_ADDR|MPOL_F_MEMS_ALLOWED))
530 return -EINVAL; 531 return -EINVAL;
532
533 if (flags & MPOL_F_MEMS_ALLOWED) {
534 if (flags & (MPOL_F_NODE|MPOL_F_ADDR))
535 return -EINVAL;
536 *policy = 0; /* just so it's initialized */
537 *nmask = cpuset_current_mems_allowed;
538 return 0;
539 }
540
531 if (flags & MPOL_F_ADDR) { 541 if (flags & MPOL_F_ADDR) {
532 down_read(&mm->mmap_sem); 542 down_read(&mm->mmap_sem);
533 vma = find_vma_intersection(mm, addr, addr+1); 543 vma = find_vma_intersection(mm, addr, addr+1);