]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm: Introduce vma_next() and vma_prev()
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Mon, 4 Jan 2021 20:13:14 +0000 (15:13 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 29 Jan 2021 16:07:56 +0000 (11:07 -0500)
Rename internam vma_next() to _vma_next().

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
include/linux/mm.h
mm/mmap.c

index 47626ea2fd221773eacc5c9737317a70c7b41cb0..f56bad25f4b3a42225014b2435aae1274df58a59 100644 (file)
@@ -2655,6 +2655,24 @@ extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned lon
 extern struct vm_area_struct *find_vma_intersection(struct mm_struct *mm,
                     unsigned long start_addr, unsigned long end_addr);
 
+static inline struct vm_area_struct *vma_next(struct mm_struct *mm,
+                       const struct vm_area_struct *vma)
+{
+       MA_STATE(mas, &mm->mm_mt, 0, 0);
+
+       mas_set(&mas, vma->vm_end);
+       return mas_next(&mas, ULONG_MAX);
+}
+
+static inline struct vm_area_struct *vma_prev(struct mm_struct *mm,
+                       const struct vm_area_struct *vma)
+{
+       MA_STATE(mas, &mm->mm_mt, 0, 0);
+
+       mas_set(&mas, vma->vm_start);
+       return mas_prev(&mas, 0);
+}
+
 static inline unsigned long vm_start_gap(struct vm_area_struct *vma)
 {
        unsigned long vm_start = vma->vm_start;
@@ -2696,6 +2714,21 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
        return vma;
 }
 
+static inline struct vm_area_struct *vma_mas_next(struct ma_state *mas)
+{
+       struct ma_state tmp;
+
+       memcpy(&tmp, mas, sizeof(tmp));
+       return mas_next(&tmp, ULONG_MAX);
+}
+
+static inline struct vm_area_struct *vma_mas_prev(struct ma_state *mas)
+{
+       struct ma_state tmp;
+
+       memcpy(&tmp, mas, sizeof(tmp));
+       return mas_prev(&tmp, 0);
+}
 static inline bool range_in_vma(struct vm_area_struct *vma,
                                unsigned long start, unsigned long end)
 {
index e75f2896dacdef45dd0fa8082266bf611018968b..fe02f3200c70d36db2a9f4ce40e32cfc8c5c33b4 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -474,7 +474,7 @@ static bool range_has_overlap(struct mm_struct *mm, unsigned long start,
 }
 
 /*
- * vma_next() - Get the next VMA.
+ * _vma_next() - Get the next VMA or the first.
  * @mm: The mm_struct.
  * @vma: The current vma.
  *
@@ -482,7 +482,7 @@ static bool range_has_overlap(struct mm_struct *mm, unsigned long start,
  *
  * Returns: The next VMA after @vma.
  */
-static inline struct vm_area_struct *vma_next(struct mm_struct *mm,
+static inline struct vm_area_struct *_vma_next(struct mm_struct *mm,
                                         struct vm_area_struct *vma)
 {
        if (!vma)
@@ -1170,7 +1170,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
        if (vm_flags & VM_SPECIAL)
                return NULL;
 
-       next = vma_next(mm, prev);
+       next = _vma_next(mm, prev);
        area = next;
        if (area && area->vm_end == end)                /* cases 6, 7, 8 */
                next = next->vm_next;
@@ -2351,7 +2351,7 @@ static void unmap_region(struct mm_struct *mm,
                struct vm_area_struct *vma, struct vm_area_struct *prev,
                unsigned long start, unsigned long end)
 {
-       struct vm_area_struct *next = vma_next(mm, prev);
+       struct vm_area_struct *next = _vma_next(mm, prev);
        struct mmu_gather tlb;
 
        lru_add_drain();
@@ -2503,7 +2503,7 @@ int do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma,
                if (error)
                        return error;
                prev = vma;
-               vma = vma_next(mm, prev);
+               vma = _vma_next(mm, prev);
                mas->index = start;
                mas_reset(mas);
        } else {
@@ -2520,7 +2520,7 @@ int do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma,
                int error = __split_vma(mm, last, end, 1);
                if (error)
                        return error;
-               vma = vma_next(mm, prev);
+               vma = _vma_next(mm, prev);
                mas_reset(mas);
        }