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

mm: renovate page_address_in_vma()

This function doesn't modify any of its arguments, so if we make a few
other functions take const pointers, we can make page_address_in_vma()
take const pointers too.  All of its callers have the containing folio
already, so pass that in as an argument instead of recalculating it.  Also
add kernel-doc

Link: https://lkml.kernel.org/r/20241005200121.3231142-4-willy@infradead.org


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 7d3e93ec
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -728,11 +728,8 @@ page_vma_mapped_walk_restart(struct page_vma_mapped_walk *pvmw)
}

bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw);

/*
 * Used by swapoff to help locate where page is expected in vma.
 */
unsigned long page_address_in_vma(struct page *, struct vm_area_struct *);
unsigned long page_address_in_vma(const struct folio *folio,
		const struct page *, const struct vm_area_struct *);

/*
 * Cleans the PTEs of shared mappings.
+2 −2
Original line number Diff line number Diff line
@@ -841,7 +841,7 @@ static inline bool free_area_empty(struct free_area *area, int migratetype)
}

/* mm/util.c */
struct anon_vma *folio_anon_vma(struct folio *folio);
struct anon_vma *folio_anon_vma(const struct folio *folio);

#ifdef CONFIG_MMU
void unmap_mapping_folio(struct folio *folio);
@@ -959,7 +959,7 @@ extern pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma);
 * If any page in this range is mapped by this VMA, return the first address
 * where any of these pages appear.  Otherwise, return -EFAULT.
 */
static inline unsigned long vma_address(struct vm_area_struct *vma,
static inline unsigned long vma_address(const struct vm_area_struct *vma,
		pgoff_t pgoff, unsigned long nr_pages)
{
	unsigned long address;
+3 −4
Original line number Diff line number Diff line
@@ -1256,7 +1256,7 @@ static int write_protect_page(struct vm_area_struct *vma, struct folio *folio,
	if (WARN_ON_ONCE(folio_test_large(folio)))
		return err;

	pvmw.address = page_address_in_vma(&folio->page, vma);
	pvmw.address = page_address_in_vma(folio, folio_page(folio, 0), vma);
	if (pvmw.address == -EFAULT)
		goto out;

@@ -1340,7 +1340,7 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
{
	struct folio *kfolio = page_folio(kpage);
	struct mm_struct *mm = vma->vm_mm;
	struct folio *folio;
	struct folio *folio = page_folio(page);
	pmd_t *pmd;
	pmd_t pmde;
	pte_t *ptep;
@@ -1350,7 +1350,7 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
	int err = -EFAULT;
	struct mmu_notifier_range range;

	addr = page_address_in_vma(page, vma);
	addr = page_address_in_vma(folio, page, vma);
	if (addr == -EFAULT)
		goto out;

@@ -1416,7 +1416,6 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
	ptep_clear_flush(vma, addr, ptep);
	set_pte_at(mm, addr, ptep, newpte);

	folio = page_folio(page);
	folio_remove_rmap_pte(folio, page, vma);
	if (!folio_mapped(folio))
		folio_free_swap(folio);
+1 −1
Original line number Diff line number Diff line
@@ -671,7 +671,7 @@ static void collect_procs_file(struct folio *folio, struct page *page,
			 */
			if (vma->vm_mm != t->mm)
				continue;
			addr = page_address_in_vma(page, vma);
			addr = page_address_in_vma(folio, page, vma);
			add_to_kill_anon_file(t, page, vma, to_kill, addr);
		}
	}
+1 −1
Original line number Diff line number Diff line
@@ -1367,7 +1367,7 @@ static long do_mbind(unsigned long start, unsigned long len,
			if (!list_entry_is_head(folio, &pagelist, lru)) {
				vma_iter_init(&vmi, mm, start);
				for_each_vma_range(vmi, vma, end) {
					addr = page_address_in_vma(
					addr = page_address_in_vma(folio,
						folio_page(folio, 0), vma);
					if (addr != -EFAULT)
						break;
Loading