Liam R. Howlett
208c09db6d
mm/swapfile: use vma iterator instead of vma linked list
...
unuse_mm() no longer needs to reference the linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-64-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:25 -07:00
Matthew Wilcox (Oracle)
9ec08f30f8
mm/pagewalk: use vma_find() instead of vma linked list
...
walk_page_range() no longer uses the one vma linked list reference.
Link: https://lkml.kernel.org/r/20220906194824.2110408-63-Liam.Howlett@oracle.com
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 >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:25 -07:00
Liam R. Howlett
e1c2c775d4
mm/oom_kill: use vma iterators instead of vma linked list
...
Use vma iterator in preparation of removing the linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-62-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:25 -07:00
Liam R. Howlett
4267d1fd78
mm/msync: use vma_find() instead of vma linked list
...
Remove a single use of the vma linked list in preparation for the
removal of the linked list. Uses find_vma() to get the next element.
Link: https://lkml.kernel.org/r/20220906194824.2110408-61-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:25 -07:00
Liam R. Howlett
396a44cc58
mm/mremap: use vma_find_intersection() instead of vma linked list
...
Using the vma_find_intersection() call allows for cleaner code and
removes linked list users in preparation of the linked list removal.
Also remove one user of the linked list at the same time in favour of
find_vma().
Link: https://lkml.kernel.org/r/20220906194824.2110408-60-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:24 -07:00
Liam R. Howlett
70821e0b89
mm/mprotect: use maple tree navigation instead of VMA linked list
...
Switch to navigating the VMA list with the maple tree operators in
preparation for removing the linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-59-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:24 -07:00
Matthew Wilcox (Oracle)
33108b05f3
mm/mlock: use vma iterator and maple state instead of vma linked list
...
Handle overflow checking in count_mm_mlocked_page_nr() differently.
Link: https://lkml.kernel.org/r/20220906194824.2110408-58-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:24 -07:00
Liam R. Howlett
66850be55e
mm/mempolicy: use vma iterator & maple state instead of vma linked list
...
Reworked the way mbind_range() finds the first VMA to reuse the maple
state and limit the number of tree walks needed.
Note, this drops the VM_BUG_ON(!vma) call, which would catch a start
address higher than the last VMA. The code was written in a way that
allowed no VMA updates to occur and still return success. There should be
no functional change to this scenario with the new code.
Link: https://lkml.kernel.org/r/20220906194824.2110408-57-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:24 -07:00
Liam R. Howlett
ba0aff8ea6
mm/memcontrol: stop using mm->highest_vm_end
...
Pass through ULONG_MAX instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-56-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:23 -07:00
Liam R. Howlett
3547481831
mm/madvise: use vma_find() instead of vma linked list
...
madvise_walk_vmas() no longer uses linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-55-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:23 -07:00
Matthew Wilcox (Oracle)
a5f18ba072
mm/ksm: use vma iterators instead of vma linked list
...
Remove the use of the linked list for eventual removal.
Link: https://lkml.kernel.org/r/20220906194824.2110408-54-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:23 -07:00
Matthew Wilcox (Oracle)
685405020b
mm/khugepaged: stop using vma linked list
...
Use vma iterator & find_vma() instead of vma linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-53-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:23 -07:00
Liam R. Howlett
c4d1a92d0d
mm/gup: use maple tree navigation instead of linked list
...
Use find_vma_intersection() to locate the VMAs in __mm_populate() instead
of using find_vma() and the linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-52-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:23 -07:00
Liam R. Howlett
becc8cdb6c
bpf: remove VMA linked list
...
Use vma_next() and remove reference to the start of the linked list
Link: https://lkml.kernel.org/r/20220906194824.2110408-51-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:22 -07:00
Matthew Wilcox (Oracle)
fa5e587679
fork: use VMA iterator
...
The VMA iterator is faster than the linked list and removing the linked
list will shrink the vm_area_struct.
Link: https://lkml.kernel.org/r/20220906194824.2110408-50-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:22 -07:00
Matthew Wilcox (Oracle)
0cd4d02c32
sched: use maple tree iterator to walk VMAs
...
The linked list is slower than walking the VMAs using the maple tree. We
can't use the VMA iterator here because it doesn't support moving to an
earlier position.
Link: https://lkml.kernel.org/r/20220906194824.2110408-49-Liam.Howlett@oracle.com
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 >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:22 -07:00
Matthew Wilcox (Oracle)
fcb72a585a
perf: use VMA iterator
...
The VMA iterator is faster than the linked list and removing the linked
list will shrink the vm_area_struct.
Link: https://lkml.kernel.org/r/20220906194824.2110408-48-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:22 -07:00
Matthew Wilcox (Oracle)
160c820023
acct: use VMA iterator instead of linked list
...
The VMA iterator is faster than the linked list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-47-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:22 -07:00
Liam R. Howlett
01293a62ba
ipc/shm: use VMA iterator instead of linked list
...
The VMA iterator is faster than the linked llist, and it can be walked
even when VMAs are being removed from the address space, so there's no
need to keep track of 'next'.
Link: https://lkml.kernel.org/r/20220906194824.2110408-46-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:21 -07:00
Liam R. Howlett
69dbe6daf1
userfaultfd: use maple tree iterator to iterate VMAs
...
Don't use the mm_struct linked list or the vma->vm_next in prep for
removal.
Link: https://lkml.kernel.org/r/20220906194824.2110408-45-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:21 -07:00
Matthew Wilcox (Oracle)
c4c84f0628
fs/proc/task_mmu: stop using linked list and highest_vm_end
...
Remove references to mm_struct linked list and highest_vm_end for when
they are removed
Link: https://lkml.kernel.org/r/20220906194824.2110408-44-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:21 -07:00
Liam R. Howlett
5f14b9246e
fs/proc/base: use the vma iterators in place of linked list
...
Use the vma iterator instead of a for loop across the linked list. The
link list of vmas will be removed in this patch set.
Link: https://lkml.kernel.org/r/20220906194824.2110408-43-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:21 -07:00
Matthew Wilcox (Oracle)
19066e5868
exec: use VMA iterator instead of linked list
...
Remove a use of the vm_next list by doing the initial lookup with the VMA
iterator and then using it to find the next entry.
Link: https://lkml.kernel.org/r/20220906194824.2110408-42-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:21 -07:00
Matthew Wilcox (Oracle)
182ea1d717
coredump: remove vma linked list walk
...
Use the Maple Tree iterator instead. This is too complicated for the VMA
iterator to handle, so let's open-code it for now. If this turns out to
be a common pattern, we can migrate it to common code.
Link: https://lkml.kernel.org/r/20220906194824.2110408-41-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:20 -07:00
Matthew Wilcox (Oracle)
cbd43755ad
um: remove vma linked list walk
...
Use the VMA iterator instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-40-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:20 -07:00
Matthew Wilcox (Oracle)
df724cedcf
optee: remove vma linked list walk
...
Use the VMA iterator instead. Change the calling convention of
__check_mem_type() to pass in the mm instead of the first vma in the
range.
Link: https://lkml.kernel.org/r/20220906194824.2110408-39-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:20 -07:00
Matthew Wilcox (Oracle)
d9fa0e37cd
cxl: remove vma linked list walk
...
Use the VMA iterator instead. This requires a little restructuring of the
surrounding code to hoist the mm to the caller. That turns
cxl_prefault_one() into a trivial function, so call cxl_fault_segment()
directly.
Link: https://lkml.kernel.org/r/20220906194824.2110408-38-Liam.Howlett@oracle.com
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 >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:20 -07:00
Matthew Wilcox (Oracle)
49c40fb4b8
xtensa: remove vma linked list walks
...
Use the VMA iterator instead. Since VMA can no longer be NULL in the
loop, then deal with out-of-memory outside the loop. This means a
slightly longer run time in the failure case (-ENOMEM) - it will run to
the end of the VMAs before erroring instead of in the middle of the loop.
Link: https://lkml.kernel.org/r/20220906194824.2110408-37-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:20 -07:00
Matthew Wilcox (Oracle)
a388462116
x86: remove vma linked list walks
...
Use the VMA iterator instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-36-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:20 -07:00
Matthew Wilcox (Oracle)
e7b6b990e5
s390: remove vma linked list walks
...
Use the VMA iterator instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-35-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:19 -07:00
Matthew Wilcox (Oracle)
405e669172
powerpc: remove mmap linked list walks
...
Use the VMA iterator instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-34-Liam.Howlett@oracle.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Vlastimil Babka <vbabka@suse.cz >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:19 -07:00
Matthew Wilcox (Oracle)
70fa203165
parisc: remove mmap linked list from cache handling
...
Use the VMA iterator instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-33-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:19 -07:00
Liam R. Howlett
ef770d180e
arm64: Change elfcore for_each_mte_vma() to use VMA iterator
...
Rework for_each_mte_vma() to use a VMA iterator instead of an explicit
linked-list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-32-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com >
Acked-by: Catalin Marinas <catalin.marinas@arm.com >
Link: https://lore.kernel.org/r/20220218023650.672072-1-Liam.Howlett@oracle.com
Signed-off-by: Will Deacon <will@kernel.org >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:19 -07:00
Matthew Wilcox (Oracle)
de2b84d24b
arm64: remove mmap linked list from vdso
...
Use the VMA iterator instead.
Link: https://lkml.kernel.org/r/20220906194824.2110408-31-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:19 -07:00
Liam R. Howlett
67e7c16764
mm/mmap: change do_brk_munmap() to use do_mas_align_munmap()
...
do_brk_munmap() has already aligned the address and has a maple tree state
to be used. Use the new do_mas_align_munmap() to avoid unnecessary
alignment and error checks.
Link: https://lkml.kernel.org/r/20220906194824.2110408-30-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:18 -07:00
Liam R. Howlett
11f9a21ab6
mm/mmap: reorganize munmap to use maple states
...
Remove __do_munmap() in favour of do_munmap(), do_mas_munmap(), and
do_mas_align_munmap().
do_munmap() is a wrapper to create a maple state for any callers that have
not been converted to the maple tree.
do_mas_munmap() takes a maple state to mumap a range. This is just a
small function which checks for error conditions and aligns the end of the
range.
do_mas_align_munmap() uses the aligned range to mumap a range.
do_mas_align_munmap() starts with the first VMA in the range, then finds
the last VMA in the range. Both start and end are split if necessary.
Then the VMAs are removed from the linked list and the mm mlock count is
updated at the same time. Followed by a single tree operation of
overwriting the area in with a NULL. Finally, the detached list is
unmapped and freed.
By reorganizing the munmap calls as outlined, it is now possible to avoid
extra work of aligning pre-aligned callers which are known to be safe,
avoid extra VMA lookups or tree walks for modifications.
detach_vmas_to_be_unmapped() is no longer used, so drop this code.
vm_brk_flags() can just call the do_mas_munmap() as it checks for
intersecting VMAs directly.
Link: https://lkml.kernel.org/r/20220906194824.2110408-29-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:18 -07:00
Liam R. Howlett
e99668a564
mm/mmap: move mmap_region() below do_munmap()
...
Relocation of code for the next commit. There should be no changes here.
Link: https://lkml.kernel.org/r/20220906194824.2110408-28-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:18 -07:00
Liam R. Howlett
d7c6229557
mm: convert vma_lookup() to use mtree_load()
...
Unlike the rbtree, the Maple Tree will return a NULL if there's nothing at
a particular address.
Since the previous commit dropped the vmacache, it is now possible to
consult the tree directly.
Link: https://lkml.kernel.org/r/20220906194824.2110408-27-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:18 -07:00
Liam R. Howlett
7964cf8caa
mm: remove vmacache
...
By using the maple tree and the maple tree state, the vmacache is no
longer beneficial and is complicating the VMA code. Remove the vmacache
to reduce the work in keeping it up to date and code complexity.
Link: https://lkml.kernel.org/r/20220906194824.2110408-26-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:18 -07:00
Liam R. Howlett
4dd1b84140
mm/mmap: use advanced maple tree API for mmap_region()
...
Changing mmap_region() to use the maple tree state and the advanced maple
tree interface allows for a lot less tree walking.
This change removes the last caller of munmap_vma_range(), so drop this
unused function.
Add vma_expand() to expand a VMA if possible by doing the necessary
hugepage check, uprobe_munmap of files, dcache flush, modifications then
undoing the detaches, etc.
Link: https://lkml.kernel.org/r/20220906194824.2110408-25-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:17 -07:00
Liam R. Howlett
abdba2dda0
mm: use maple tree operations for find_vma_intersection()
...
Move find_vma_intersection() to mmap.c and change implementation to maple
tree.
When searching for a vma within a range, it is easier to use the maple
tree interface.
Exported find_vma_intersection() for kvm module.
Link: https://lkml.kernel.org/r/20220906194824.2110408-24-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:17 -07:00
Liam R. Howlett
2e7ce7d354
mm/mmap: change do_brk_flags() to expand existing VMA and add do_brk_munmap()
...
Avoid allocating a new VMA when it a vma modification can occur. When a
brk() can expand or contract a VMA, then the single store operation will
only modify one index of the maple tree instead of causing a node to split
or coalesce. This avoids unnecessary allocations/frees of maple tree
nodes and VMAs.
Move some limit & flag verifications out of the do_brk_flags() function to
use only relevant checks in the code path of bkr() and vm_brk_flags().
Set the vma to check if it can expand in vm_brk_flags() if extra criteria
are met.
Drop userfaultfd from do_brk_flags() path and only use it in
vm_brk_flags() path since that is the only place a munmap will happen.
Add a wraper for munmap for the brk case called do_brk_munmap().
Link: https://lkml.kernel.org/r/20220906194824.2110408-23-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:17 -07:00
Liam R. Howlett
94d815b279
mm/khugepaged: optimize collapse_pte_mapped_thp() by using vma_lookup()
...
vma_lookup() will walk the vma tree once and not continue to look for the
next vma. Since the exact vma is checked below, this is a more optimal
way of searching.
Link: https://lkml.kernel.org/r/20220906194824.2110408-22-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:17 -07:00
Liam R. Howlett
dc8635b25e
mm: optimize find_exact_vma() to use vma_lookup()
...
Use vma_lookup() to walk the tree to the start value requested. If the
vma at the start does not match, then the answer is NULL and there is no
need to look at the next vma the way that find_vma() would.
Link: https://lkml.kernel.org/r/20220906194824.2110408-21-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Reviewed-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:17 -07:00
Liam R. Howlett
7ccf089b26
xen: use vma_lookup() in privcmd_ioctl_mmap()
...
vma_lookup() walks the VMA tree for a specific value, find_vma() will
search the tree after walking to a specific value. It is more efficient
to only walk to the requested value since privcmd_ioctl_mmap() will exit
the loop if vm_start != msg->va.
Link: https://lkml.kernel.org/r/20220906194824.2110408-20-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:16 -07:00
Liam R. Howlett
3b0e81a1cd
mmap: change zeroing of maple tree in __vma_adjust()
...
Only write to the maple tree if we are not inserting or the insert isn't
going to overwrite the area to clear. This avoids spanning writes and
node coealescing when unnecessary.
The change requires a custom search for the linked list addition to find
the correct VMA for the prev link.
Link: https://lkml.kernel.org/r/20220906194824.2110408-19-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:16 -07:00
Liam R. Howlett
524e00b36e
mm: remove rb tree.
...
Remove the RB tree and start using the maple tree for vm_area_struct
tracking.
Drop validate_mm() calls in expand_upwards() and expand_downwards() as the
lock is not held.
Link: https://lkml.kernel.org/r/20220906194824.2110408-18-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:16 -07:00
Matthew Wilcox (Oracle)
0c563f1480
proc: remove VMA rbtree use from nommu
...
These users of the rbtree should probably have been walks of the linked
list, but convert them to use walks of the maple tree.
Link: https://lkml.kernel.org/r/20220906194824.2110408-17-Liam.Howlett@oracle.com
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 >
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:16 -07:00
Liam R. Howlett
d0cf3dd47f
damon: convert __damon_va_three_regions to use the VMA iterator
...
This rather specialised walk can use the VMA iterator. If this proves to
be too slow, we can write a custom routine to find the two largest gaps,
but it will be somewhat complicated, so let's see if we need it first.
Update the kunit test case to use the maple tree. This also fixes an
issue with the kunit testcase not adding the last VMA to the list.
Link: https://lkml.kernel.org/r/20220906194824.2110408-16-Liam.Howlett@oracle.com
Fixes: 17ccae8bb5 (mm/damon: add kunit tests)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Reviewed-by: SeongJae Park <sj@kernel.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Vlastimil Babka <vbabka@suse.cz >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:16 -07:00
Liam R. Howlett
c9dbe82cb9
kernel/fork: use maple tree for dup_mmap() during forking
...
The maple tree was already tracking VMAs in this function by an earlier
commit, but the rbtree iterator was being used to iterate the list.
Change the iterator to use a maple tree native iterator and switch to the
maple tree advanced API to avoid multiple walks of the tree during insert
operations. Unexport the now-unused vma_store() function.
For performance reasons we bulk allocate the maple tree nodes. The node
calculations are done internally to the tree and use the VMA count and
assume the worst-case node requirements. The VM_DONT_COPY flag does not
allow for the most efficient copy method of the tree and so a bulk loading
algorithm is used.
Link: https://lkml.kernel.org/r/20220906194824.2110408-15-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com >
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org >
Acked-by: Vlastimil Babka <vbabka@suse.cz >
Tested-by: Yu Zhao <yuzhao@google.com >
Cc: Catalin Marinas <catalin.marinas@arm.com >
Cc: David Hildenbrand <david@redhat.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Davidlohr Bueso <dave@stgolabs.net >
Cc: SeongJae Park <sj@kernel.org >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Will Deacon <will@kernel.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2022-09-26 19:46:16 -07:00