Commit 284e0592 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton
Browse files

mm: remove CONFIG_PER_VMA_LOCK ifdefs

Patch series "Handle most file-backed faults under the VMA lock", v3.

This patchset adds the ability to handle page faults on parts of files
which are already in the page cache without taking the mmap lock.


This patch (of 10):

Provide lock_vma_under_rcu() when CONFIG_PER_VMA_LOCK is not defined to
eliminate ifdefs in the users.

Link: https://lkml.kernel.org/r/20230724185410.1124082-1-willy@infradead.org
Link: https://lkml.kernel.org/r/20230724185410.1124082-2-willy@infradead.org


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarSuren Baghdasaryan <surenb@google.com>
Cc: Punit Agrawal <punit.agrawal@bytedance.com>
Cc: Arjun Roy <arjunroy@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 6935e052
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -587,7 +587,6 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,

	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);

#ifdef CONFIG_PER_VMA_LOCK
	if (!(mm_flags & FAULT_FLAG_USER))
		goto lock_mmap;

@@ -615,7 +614,6 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
		return 0;
	}
lock_mmap:
#endif /* CONFIG_PER_VMA_LOCK */

retry:
	vma = lock_mm_and_find_vma(mm, addr, regs);
+0 −4
Original line number Diff line number Diff line
@@ -469,7 +469,6 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address,
	if (is_exec)
		flags |= FAULT_FLAG_INSTRUCTION;

#ifdef CONFIG_PER_VMA_LOCK
	if (!(flags & FAULT_FLAG_USER))
		goto lock_mmap;

@@ -501,7 +500,6 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address,
		return user_mode(regs) ? 0 : SIGBUS;

lock_mmap:
#endif /* CONFIG_PER_VMA_LOCK */

	/* When running in the kernel we expect faults to occur only to
	 * addresses in user space.  All other faults represent errors in the
@@ -551,9 +549,7 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address,

	mmap_read_unlock(current->mm);

#ifdef CONFIG_PER_VMA_LOCK
done:
#endif
	if (unlikely(fault & VM_FAULT_ERROR))
		return mm_fault_error(regs, address, fault);

+0 −4
Original line number Diff line number Diff line
@@ -283,7 +283,6 @@ void handle_page_fault(struct pt_regs *regs)
		flags |= FAULT_FLAG_WRITE;
	else if (cause == EXC_INST_PAGE_FAULT)
		flags |= FAULT_FLAG_INSTRUCTION;
#ifdef CONFIG_PER_VMA_LOCK
	if (!(flags & FAULT_FLAG_USER))
		goto lock_mmap;

@@ -311,7 +310,6 @@ void handle_page_fault(struct pt_regs *regs)
		return;
	}
lock_mmap:
#endif /* CONFIG_PER_VMA_LOCK */

retry:
	vma = lock_mm_and_find_vma(mm, addr, regs);
@@ -368,9 +366,7 @@ void handle_page_fault(struct pt_regs *regs)

	mmap_read_unlock(mm);

#ifdef CONFIG_PER_VMA_LOCK
done:
#endif
	if (unlikely(fault & VM_FAULT_ERROR)) {
		tsk->thread.bad_cause = cause;
		mm_fault_error(regs, addr, fault);
+0 −2
Original line number Diff line number Diff line
@@ -407,7 +407,6 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access)
		access = VM_WRITE;
	if (access == VM_WRITE)
		flags |= FAULT_FLAG_WRITE;
#ifdef CONFIG_PER_VMA_LOCK
	if (!(flags & FAULT_FLAG_USER))
		goto lock_mmap;
	vma = lock_vma_under_rcu(mm, address);
@@ -432,7 +431,6 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access)
		goto out;
	}
lock_mmap:
#endif /* CONFIG_PER_VMA_LOCK */
	mmap_read_lock(mm);

	gmap = NULL;
+0 −4
Original line number Diff line number Diff line
@@ -1328,7 +1328,6 @@ void do_user_addr_fault(struct pt_regs *regs,
	}
#endif

#ifdef CONFIG_PER_VMA_LOCK
	if (!(flags & FAULT_FLAG_USER))
		goto lock_mmap;

@@ -1358,7 +1357,6 @@ void do_user_addr_fault(struct pt_regs *regs,
		return;
	}
lock_mmap:
#endif /* CONFIG_PER_VMA_LOCK */

retry:
	vma = lock_mm_and_find_vma(mm, address, regs);
@@ -1418,9 +1416,7 @@ void do_user_addr_fault(struct pt_regs *regs,
	}

	mmap_read_unlock(mm);
#ifdef CONFIG_PER_VMA_LOCK
done:
#endif
	if (likely(!(fault & VM_FAULT_ERROR)))
		return;

Loading