mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
mm/gup: remove gup_fast_pgd_leaf() and clean up the relevant codes
In the current kernel, only pud huge page is supported in some architectures. P4d and pgd huge pages haven't been supported yet. And in mm/gup.c, there's no pgd huge page handling in the follow_page_mask() code path. Hence it doesn't make sense to only have gup_fast_pgd_leaf() in gup_fast code path. Here remove gup_fast_pgd_leaf() and clean up the relevant codes. Link: https://lkml.kernel.org/r/20250410035717.473207-4-bhe@redhat.com Signed-off-by: Baoquan He <bhe@redhat.com> Reviewed-by: Oscar Salvador <osalvador@suse.de> Acked-by: David Hildenbrand <david@redhat.com> Cc: Yanjun.Zhu <yanjun.zhu@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
ede27b7ee2
commit
339122abb5
1 changed files with 3 additions and 46 deletions
49
mm/gup.c
49
mm/gup.c
|
|
@ -3172,46 +3172,6 @@ static int gup_fast_pud_leaf(pud_t orig, pud_t *pudp, unsigned long addr,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int gup_fast_pgd_leaf(pgd_t orig, pgd_t *pgdp, unsigned long addr,
|
||||
unsigned long end, unsigned int flags, struct page **pages,
|
||||
int *nr)
|
||||
{
|
||||
int refs;
|
||||
struct page *page;
|
||||
struct folio *folio;
|
||||
|
||||
if (!pgd_access_permitted(orig, flags & FOLL_WRITE))
|
||||
return 0;
|
||||
|
||||
BUILD_BUG_ON(pgd_devmap(orig));
|
||||
|
||||
page = pgd_page(orig);
|
||||
refs = record_subpages(page, PGDIR_SIZE, addr, end, pages + *nr);
|
||||
|
||||
folio = try_grab_folio_fast(page, refs, flags);
|
||||
if (!folio)
|
||||
return 0;
|
||||
|
||||
if (unlikely(pgd_val(orig) != pgd_val(*pgdp))) {
|
||||
gup_put_folio(folio, refs, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!pgd_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) {
|
||||
gup_put_folio(folio, refs, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!gup_fast_folio_allowed(folio, flags)) {
|
||||
gup_put_folio(folio, refs, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
*nr += refs;
|
||||
folio_set_referenced(folio);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int gup_fast_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr,
|
||||
unsigned long end, unsigned int flags, struct page **pages,
|
||||
int *nr)
|
||||
|
|
@ -3306,12 +3266,9 @@ static void gup_fast_pgd_range(unsigned long addr, unsigned long end,
|
|||
next = pgd_addr_end(addr, end);
|
||||
if (pgd_none(pgd))
|
||||
return;
|
||||
if (unlikely(pgd_leaf(pgd))) {
|
||||
if (!gup_fast_pgd_leaf(pgd, pgdp, addr, next, flags,
|
||||
pages, nr))
|
||||
return;
|
||||
} else if (!gup_fast_p4d_range(pgdp, pgd, addr, next, flags,
|
||||
pages, nr))
|
||||
BUILD_BUG_ON(pgd_leaf(pgd));
|
||||
if (!gup_fast_p4d_range(pgdp, pgd, addr, next, flags,
|
||||
pages, nr))
|
||||
return;
|
||||
} while (pgdp++, addr = next, addr != end);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue