Skip to content

Commit

Permalink
nommu: Remove uses of VMA linked list
Browse files Browse the repository at this point in the history
Use the maple tree or VMA iterator instead.  This is faster and will
allow us to shrink the VMA.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
  • Loading branch information
Matthew Wilcox (Oracle) authored and Liam R. Howlett committed Feb 20, 2022
1 parent acc74cc commit a7a78f2
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions mm/nommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1370,6 +1370,7 @@ static int shrink_vma(struct mm_struct *mm,
*/
int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf)
{
MA_STATE(mas, &mm->mm_mt, start, start);
struct vm_area_struct *vma;
unsigned long end;
int ret;
Expand All @@ -1381,7 +1382,7 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, struct list
end = start + len;

/* find the first potentially overlapping VMA */
vma = find_vma(mm, start);
vma = mas_find(&mas, end - 1);
if (!vma) {
static int limit;
if (limit < 5) {
Expand All @@ -1400,7 +1401,7 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, struct list
return -EINVAL;
if (end == vma->vm_end)
goto erase_whole_vma;
vma = vma->vm_next;
vma = mas_next(&mas, end - 1);
} while (vma);
return -EINVAL;
} else {
Expand Down Expand Up @@ -1449,19 +1450,25 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
*/
void exit_mmap(struct mm_struct *mm)
{
VMA_ITERATOR(vmi, mm, 0);
struct vm_area_struct *vma;

if (!mm)
return;

mm->total_vm = 0;

while ((vma = mm->mmap)) {
mm->mmap = vma->vm_next;
/*
* Lock the mm to avoid assert complaining even though this is the only
* user of the mm
*/
mmap_write_lock(mm);
for_each_vma(vmi, vma) {
delete_vma_from_mm(vma);
delete_vma(mm, vma);
cond_resched();
}
mmap_write_unlock(mm);
__mt_destroy(&mm->mm_mt);
}

Expand Down

0 comments on commit a7a78f2

Please sign in to comment.