struct task_struct *p = current;
        struct mm_struct *mm = p->mm;
        u64 runtime = p->se.sum_exec_runtime;
-       MA_STATE(mas, &mm->mm_mt, 0, 0);
        struct vm_area_struct *vma;
        unsigned long start, end;
        unsigned long nr_pte_updates = 0;
        long pages, virtpages;
+       struct vma_iterator vmi;
 
        SCHED_WARN_ON(p != container_of(work, struct task_struct, numa_work));
 
 
        if (!mmap_read_trylock(mm))
                return;
-       mas_set(&mas, start);
-       vma = mas_find(&mas, ULONG_MAX);
+       vma_iter_init(&vmi, mm, start);
+       vma = vma_next(&vmi);
        if (!vma) {
                reset_ptenuma_scan(p);
                start = 0;
-               mas_set(&mas, start);
-               vma = mas_find(&mas, ULONG_MAX);
+               vma_iter_set(&vmi, start);
+               vma = vma_next(&vmi);
        }
 
-       for (; vma; vma = mas_find(&mas, ULONG_MAX)) {
+       do {
                if (!vma_migratable(vma) || !vma_policy_mof(vma) ||
                        is_vm_hugetlb_page(vma) || (vma->vm_flags & VM_MIXEDMAP)) {
                        continue;
 
                        cond_resched();
                } while (end != vma->vm_end);
-       }
+       } for_each_vma(vmi, vma);
 
 out:
        /*