Similar to what we did with mapping_interval_tree*(), let's declare
anon_vma_interval_tree*() in terms of anon_vma rather than rb_root_cached.

In each case the rb tree referenced is &anon_vma->rb_root, so just pass
anon_vma and the functions can figure this out themselves.

Additionally, rename 'node' to 'avc', 'index' to 'pgoff_start', and 'last'
to 'pgoff_last' to make clear what is being passed.

Finally express page offsets in terms of pgoff_t to be consistent.

No functional change intended.

Signed-off-by: Lorenzo Stoakes <[email protected]>
---
 include/linux/mm.h                | 27 +++++++++++---------
 mm/interval_tree.c                | 41 ++++++++++++++++---------------
 mm/ksm.c                          |  7 ++----
 mm/memory-failure.c               |  3 +--
 mm/rmap.c                         | 11 ++++-----
 mm/vma.c                          |  4 +--
 tools/testing/vma/include/stubs.h |  4 +--
 7 files changed, 48 insertions(+), 49 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index 703e07ff7d12..cf2d42747064 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -4081,22 +4081,25 @@ mapping_interval_tree_iter_next(struct vm_area_struct 
*vma,
             vma; vma = mapping_interval_tree_iter_next(vma, pgoff_start,    \
                                                        pgoff_last))
 
-void anon_vma_interval_tree_insert(struct anon_vma_chain *node,
-                                  struct rb_root_cached *root);
-void anon_vma_interval_tree_remove(struct anon_vma_chain *node,
-                                  struct rb_root_cached *root);
+void anon_vma_interval_tree_insert(struct anon_vma_chain *avc,
+                                  struct anon_vma *anon_vma);
+void anon_vma_interval_tree_remove(struct anon_vma_chain *avc,
+                                  struct anon_vma *anon_vma);
 struct anon_vma_chain *
-anon_vma_interval_tree_iter_first(struct rb_root_cached *root,
-                                 unsigned long start, unsigned long last);
-struct anon_vma_chain *anon_vma_interval_tree_iter_next(
-       struct anon_vma_chain *node, unsigned long start, unsigned long last);
+anon_vma_interval_tree_iter_first(struct anon_vma *anon_vma,
+                                 pgoff_t pgoff_start, pgoff_t pgoff_last);
+struct anon_vma_chain *
+anon_vma_interval_tree_iter_next(struct anon_vma_chain *avc,
+                                pgoff_t pgoff_start, pgoff_t pgoff_last);
 #ifdef CONFIG_DEBUG_VM_RB
-void anon_vma_interval_tree_verify(struct anon_vma_chain *node);
+void anon_vma_interval_tree_verify(struct anon_vma_chain *avc);
 #endif
 
-#define anon_vma_interval_tree_foreach(avc, root, start, last)          \
-       for (avc = anon_vma_interval_tree_iter_first(root, start, last); \
-            avc; avc = anon_vma_interval_tree_iter_next(avc, start, last))
+#define anon_vma_interval_tree_foreach(avc, anon_vma, pgoff_start, pgoff_last) 
\
+       for (avc = anon_vma_interval_tree_iter_first(anon_vma, pgoff_start,    \
+                                                    pgoff_last);              \
+            avc; avc = anon_vma_interval_tree_iter_next(avc, pgoff_start,     \
+                                                        pgoff_last))
 
 /* mmap.c */
 extern int __vm_enough_memory(const struct mm_struct *mm, long pages, int 
cap_sys_admin);
diff --git a/mm/interval_tree.c b/mm/interval_tree.c
index cbd3038e46a9..d90e962b28f7 100644
--- a/mm/interval_tree.c
+++ b/mm/interval_tree.c
@@ -81,54 +81,55 @@ mapping_interval_tree_iter_next(struct vm_area_struct *vma,
 
 /* Anonymous interval tree (anon_vma->rb_root) */
 
-static unsigned long avc_start_pgoff(struct anon_vma_chain *avc)
+static pgoff_t avc_start_pgoff(struct anon_vma_chain *avc)
 {
        return vma_start_pgoff(avc->vma);
 }
 
-static unsigned long avc_last_pgoff(struct anon_vma_chain *avc)
+static pgoff_t avc_last_pgoff(struct anon_vma_chain *avc)
 {
        return vma_last_pgoff(avc->vma);
 }
 
-INTERVAL_TREE_DEFINE(struct anon_vma_chain, rb, unsigned long, rb_subtree_last,
+INTERVAL_TREE_DEFINE(struct anon_vma_chain, rb, pgoff_t, rb_subtree_last,
                     avc_start_pgoff, avc_last_pgoff,
                     static, __anon_vma_interval_tree)
 
-void anon_vma_interval_tree_insert(struct anon_vma_chain *node,
-                                  struct rb_root_cached *root)
+void anon_vma_interval_tree_insert(struct anon_vma_chain *avc,
+                                  struct anon_vma *anon_vma)
 {
 #ifdef CONFIG_DEBUG_VM_RB
-       node->cached_vma_start = avc_start_pgoff(node);
-       node->cached_vma_last = avc_last_pgoff(node);
+       avc->cached_vma_start = avc_start_pgoff(avc);
+       avc->cached_vma_last = avc_last_pgoff(avc);
 #endif
-       __anon_vma_interval_tree_insert(node, root);
+       __anon_vma_interval_tree_insert(avc, &anon_vma->rb_root);
 }
 
-void anon_vma_interval_tree_remove(struct anon_vma_chain *node,
-                                  struct rb_root_cached *root)
+void anon_vma_interval_tree_remove(struct anon_vma_chain *avc,
+                                  struct anon_vma *anon_vma)
 {
-       __anon_vma_interval_tree_remove(node, root);
+       __anon_vma_interval_tree_remove(avc, &anon_vma->rb_root);
 }
 
 struct anon_vma_chain *
-anon_vma_interval_tree_iter_first(struct rb_root_cached *root,
-                                 unsigned long first, unsigned long last)
+anon_vma_interval_tree_iter_first(struct anon_vma *anon_vma,
+                                 pgoff_t pgoff_start, pgoff_t pgoff_last)
 {
-       return __anon_vma_interval_tree_iter_first(root, first, last);
+       return __anon_vma_interval_tree_iter_first(&anon_vma->rb_root,
+                                                  pgoff_start, pgoff_last);
 }
 
 struct anon_vma_chain *
-anon_vma_interval_tree_iter_next(struct anon_vma_chain *node,
-                                unsigned long first, unsigned long last)
+anon_vma_interval_tree_iter_next(struct anon_vma_chain *avc,
+                                pgoff_t pgoff_start, pgoff_t pgoff_last)
 {
-       return __anon_vma_interval_tree_iter_next(node, first, last);
+       return __anon_vma_interval_tree_iter_next(avc, pgoff_start, pgoff_last);
 }
 
 #ifdef CONFIG_DEBUG_VM_RB
-void anon_vma_interval_tree_verify(struct anon_vma_chain *node)
+void anon_vma_interval_tree_verify(struct anon_vma_chain *avc)
 {
-       WARN_ON_ONCE(node->cached_vma_start != avc_start_pgoff(node));
-       WARN_ON_ONCE(node->cached_vma_last != avc_last_pgoff(node));
+       WARN_ON_ONCE(avc->cached_vma_start != avc_start_pgoff(avc));
+       WARN_ON_ONCE(avc->cached_vma_last != avc_last_pgoff(avc));
 }
 #endif
diff --git a/mm/ksm.c b/mm/ksm.c
index 7d5b76478f0b..c6a6e1ef581d 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -3186,8 +3186,7 @@ void rmap_walk_ksm(struct folio *folio, struct 
rmap_walk_control *rwc)
                        anon_vma_lock_read(anon_vma);
                }
 
-               anon_vma_interval_tree_foreach(vmac, &anon_vma->rb_root,
-                                              0, ULONG_MAX) {
+               anon_vma_interval_tree_foreach(vmac, anon_vma, 0, ULONG_MAX) {
 
                        cond_resched();
                        vma = vmac->vma;
@@ -3248,9 +3247,7 @@ void collect_procs_ksm(const struct folio *folio, const 
struct page *page,
                                task_early_kill(tsk, force_early);
                        if (!t)
                                continue;
-                       anon_vma_interval_tree_foreach(vmac, &av->rb_root, 0,
-                                                      ULONG_MAX)
-                       {
+                       anon_vma_interval_tree_foreach(vmac, av, 0, ULONG_MAX) {
                                vma = vmac->vma;
                                if (vma->vm_mm == t->mm) {
                                        addr = rmap_item->address & PAGE_MASK;
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 5b97d26ee9b6..cbdec52b6d23 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -552,8 +552,7 @@ static void collect_procs_anon(const struct folio *folio,
 
                if (!t)
                        continue;
-               anon_vma_interval_tree_foreach(vmac, &av->rb_root,
-                                              pgoff, pgoff) {
+               anon_vma_interval_tree_foreach(vmac, av, pgoff, pgoff) {
                        vma = vmac->vma;
                        if (vma->vm_mm != t->mm)
                                continue;
diff --git a/mm/rmap.c b/mm/rmap.c
index 567e46799c64..183603813255 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -211,7 +211,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma)
        if (likely(!vma->anon_vma)) {
                vma->anon_vma = anon_vma;
                anon_vma_chain_assign(vma, avc, anon_vma);
-               anon_vma_interval_tree_insert(avc, &anon_vma->rb_root);
+               anon_vma_interval_tree_insert(avc, anon_vma);
                anon_vma->num_active_vmas++;
                allocated = NULL;
                avc = NULL;
@@ -354,7 +354,7 @@ int anon_vma_clone(struct vm_area_struct *dst, struct 
vm_area_struct *src,
        list_for_each_entry_reverse(avc, &dst->anon_vma_chain, same_vma) {
                struct anon_vma *anon_vma = avc->anon_vma;
 
-               anon_vma_interval_tree_insert(avc, &anon_vma->rb_root);
+               anon_vma_interval_tree_insert(avc, anon_vma);
                if (operation == VMA_OP_FORK)
                        maybe_reuse_anon_vma(dst, anon_vma);
        }
@@ -434,7 +434,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct 
vm_area_struct *pvma)
        anon_vma_chain_assign(vma, avc, anon_vma);
        /* Now let rmap see it. */
        anon_vma_lock_write(anon_vma);
-       anon_vma_interval_tree_insert(avc, &anon_vma->rb_root);
+       anon_vma_interval_tree_insert(avc, anon_vma);
        anon_vma->parent->num_children++;
        anon_vma_unlock_write(anon_vma);
 
@@ -499,7 +499,7 @@ void unlink_anon_vmas(struct vm_area_struct *vma)
        list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) {
                struct anon_vma *anon_vma = avc->anon_vma;
 
-               anon_vma_interval_tree_remove(avc, &anon_vma->rb_root);
+               anon_vma_interval_tree_remove(avc, anon_vma);
 
                /*
                 * Leave empty anon_vmas on the list - we'll need
@@ -2986,8 +2986,7 @@ static void rmap_walk_anon(struct folio *folio,
 
        pgoff_start = folio_pgoff(folio);
        pgoff_end = pgoff_start + folio_nr_pages(folio) - 1;
-       anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root,
-                       pgoff_start, pgoff_end) {
+       anon_vma_interval_tree_foreach(avc, anon_vma, pgoff_start, pgoff_end) {
                struct vm_area_struct *vma = avc->vma;
                unsigned long address = vma_address(vma, pgoff_start,
                                folio_nr_pages(folio));
diff --git a/mm/vma.c b/mm/vma.c
index 7dc9d087c2c7..2be0dbd7bb7b 100644
--- a/mm/vma.c
+++ b/mm/vma.c
@@ -272,7 +272,7 @@ anon_vma_interval_tree_pre_update_vma(struct vm_area_struct 
*vma)
        struct anon_vma_chain *avc;
 
        list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
-               anon_vma_interval_tree_remove(avc, &avc->anon_vma->rb_root);
+               anon_vma_interval_tree_remove(avc, avc->anon_vma);
 }
 
 static void
@@ -281,7 +281,7 @@ anon_vma_interval_tree_post_update_vma(struct 
vm_area_struct *vma)
        struct anon_vma_chain *avc;
 
        list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
-               anon_vma_interval_tree_insert(avc, &avc->anon_vma->rb_root);
+               anon_vma_interval_tree_insert(avc, avc->anon_vma);
 }
 
 /*
diff --git a/tools/testing/vma/include/stubs.h 
b/tools/testing/vma/include/stubs.h
index 9c151b860f36..51d03e9c23c5 100644
--- a/tools/testing/vma/include/stubs.h
+++ b/tools/testing/vma/include/stubs.h
@@ -272,12 +272,12 @@ static inline void flush_dcache_mmap_unlock(struct 
address_space *mapping)
 }
 
 static inline void anon_vma_interval_tree_insert(struct anon_vma_chain *avc,
-                                                struct rb_root_cached *rb)
+                                                struct anon_vma *anon_vma)
 {
 }
 
 static inline void anon_vma_interval_tree_remove(struct anon_vma_chain *avc,
-                                                struct rb_root_cached *rb)
+                                                struct anon_vma *anon_vma)
 {
 }
 
-- 
2.54.0


Reply via email to