lkml.org 
[lkml]   [2021]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 29/94] mm/mmap: Change find_vma() to use the maple tree
    Date
    Start using the maple tree to find VMA entries in an mm_struct.

    Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
    ---
    mm/mmap.c | 28 ++++++++++------------------
    1 file changed, 10 insertions(+), 18 deletions(-)

    diff --git a/mm/mmap.c b/mm/mmap.c
    index 112be171b662..3a9a9aee2f63 100644
    --- a/mm/mmap.c
    +++ b/mm/mmap.c
    @@ -2483,10 +2483,16 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,

    EXPORT_SYMBOL(get_unmapped_area);

    -/* Look up the first VMA which satisfies addr < vm_end, NULL if none. */
    +/**
    + * find_vma() - Find the VMA for a given address, or the next vma.
    + * @mm: The mm_struct to check
    + * @addr: The address
    + *
    + * Returns: The VMA associated with addr, or the next vma.
    + * May return %NULL in the case of no vma at addr or above.
    + */
    struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
    {
    - struct rb_node *rb_node;
    struct vm_area_struct *vma;

    /* Check the cache first. */
    @@ -2494,24 +2500,10 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
    if (likely(vma))
    return vma;

    - rb_node = mm->mm_rb.rb_node;
    -
    - while (rb_node) {
    - struct vm_area_struct *tmp;
    -
    - tmp = rb_entry(rb_node, struct vm_area_struct, vm_rb);
    -
    - if (tmp->vm_end > addr) {
    - vma = tmp;
    - if (tmp->vm_start <= addr)
    - break;
    - rb_node = rb_node->rb_left;
    - } else
    - rb_node = rb_node->rb_right;
    - }
    -
    + vma = mt_find(&mm->mm_mt, &addr, ULONG_MAX);
    if (vma)
    vmacache_update(addr, vma);
    +
    return vma;
    }
    EXPORT_SYMBOL(find_vma);
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-04-28 17:39    [W:4.149 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site