Commit 70821e0b authored by Liam R. Howlett's avatar Liam R. Howlett Committed by Andrew Morton
Browse files

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: default avatarLiam R. Howlett <Liam.Howlett@Oracle.com>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Tested-by: default avatarYu 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: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 33108b05
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -676,6 +676,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
	const bool rier = (current->personality & READ_IMPLIES_EXEC) &&
				(prot & PROT_READ);
	struct mmu_gather tlb;
	MA_STATE(mas, &current->mm->mm_mt, 0, 0);

	start = untagged_addr(start);

@@ -707,7 +708,8 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
	if ((pkey != -1) && !mm_pkey_is_allocated(current->mm, pkey))
		goto out;

	vma = find_vma(current->mm, start);
	mas_set(&mas, start);
	vma = mas_find(&mas, ULONG_MAX);
	error = -ENOMEM;
	if (!vma)
		goto out;
@@ -733,7 +735,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
	if (start > vma->vm_start)
		prev = vma;
	else
		prev = vma->vm_prev;
		prev = mas_prev(&mas, 0);

	tlb_gather_mmu(&tlb, current->mm);
	for (nstart = start ; ; ) {
@@ -796,7 +798,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
		if (nstart >= end)
			break;

		vma = prev->vm_next;
		vma = find_vma(current->mm, prev->vm_end);
		if (!vma || vma->vm_start != nstart) {
			error = -ENOMEM;
			break;