Merge tag 'clang-lto-v5.12-rc1-fix1' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / mm / mempolicy.c
index 2c3a865..ab51132 100644 (file)
@@ -677,7 +677,7 @@ static int queue_pages_test_walk(unsigned long start, unsigned long end,
        unsigned long flags = qp->flags;
 
        /* range check first */
-       VM_BUG_ON_VMA((vma->vm_start > start) || (vma->vm_end < end), vma);
+       VM_BUG_ON_VMA(!range_in_vma(vma, start, end), vma);
 
        if (!qp->first) {
                qp->first = vma;
@@ -875,6 +875,16 @@ static long do_set_mempolicy(unsigned short mode, unsigned short flags,
                goto out;
        }
 
+       if (flags & MPOL_F_NUMA_BALANCING) {
+               if (new && new->mode == MPOL_BIND) {
+                       new->flags |= (MPOL_F_MOF | MPOL_F_MORON);
+               } else {
+                       ret = -EINVAL;
+                       mpol_put(new);
+                       goto out;
+               }
+       }
+
        ret = mpol_set_nodemask(new, nodes, scratch);
        if (ret) {
                mpol_put(new);
@@ -2486,6 +2496,12 @@ int mpol_misplaced(struct page *page, struct vm_area_struct *vma, unsigned long
                break;
 
        case MPOL_BIND:
+               /* Optimize placement among multiple nodes via NUMA balancing */
+               if (pol->flags & MPOL_F_MORON) {
+                       if (node_isset(thisnid, pol->v.nodes))
+                               break;
+                       goto out;
+               }
 
                /*
                 * allows binding to multiple nodes.