sched: convert to vma iterator
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 20 Jan 2023 16:26:23 +0000 (11:26 -0500)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 10 Feb 2023 00:51:34 +0000 (16:51 -0800)
Use the vma iterator so that the iterator can be invalidated or updated to
avoid each caller doing so.

Link: https://lkml.kernel.org/r/20230120162650.984577-23-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/sched/fair.c

index c36aa54ae071a746bc9d585a33228c731e5de025..9c9950249d7b2b0b09141e45a21551f5130ddf79 100644 (file)
@@ -2938,11 +2938,11 @@ static void task_numa_work(struct callback_head *work)
        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));
 
@@ -2995,16 +2995,16 @@ static void task_numa_work(struct callback_head *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;
@@ -3051,7 +3051,7 @@ static void task_numa_work(struct callback_head *work)
 
                        cond_resched();
                } while (end != vma->vm_end);
-       }
+       } for_each_vma(vmi, vma);
 
 out:
        /*