linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/11] Add folio_mk_pte()
@ 2025-04-02 18:16 Matthew Wilcox (Oracle)
  2025-04-02 18:16 ` [PATCH v2 01/11] mm: Set the pte dirty if the folio is already dirty Matthew Wilcox (Oracle)
                   ` (10 more replies)
  0 siblings, 11 replies; 13+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-04-02 18:16 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Matthew Wilcox (Oracle), linux-mm, linux-arch

Today if you have a folio and want to create a PTE that points to
the first page in it, you have to convert from a folio to a page.
That's zero-cost today but will be more expensive in the future.

I didn't want to add folio_mk_pte() to each architecture, and I didn't
want to lose any optimisations that architectures have from their own
implementation of mk_pte().  Fortunately, most architectures have by
now turned their mk_pte() into a fairly bland variant of pfn_pte(),
but s390 has a special optimisation that needs to be moved into generic
code in the first patch.

At the end of this patch set, we have mk_pte() and folio_mk_pte() in
mm.h and each architecture only has to implement pfn_pte().  We've also
eliminated mk_huge_pte(), mk_huge_pmd() and mk_pmd().

Matthew Wilcox (Oracle) (11):
  mm: Set the pte dirty if the folio is already dirty
  mm: Introduce a common definition of mk_pte()
  sparc32: Remove custom definition of mk_pte()
  x86: Remove custom definition of mk_pte()
  um: Remove custom definition of mk_pte()
  mm: Make mk_pte() definition unconditional
  mm: Add folio_mk_pte()
  hugetlb: Simplify make_huge_pte()
  mm: Remove mk_huge_pte()
  mm: Add folio_mk_pmd()
  arch: Remove mk_pmd()

 arch/alpha/include/asm/pgtable.h             |  7 ----
 arch/arc/include/asm/hugepage.h              |  2 -
 arch/arc/include/asm/pgtable-levels.h        |  2 -
 arch/arm/include/asm/pgtable-3level.h        |  1 -
 arch/arm/include/asm/pgtable.h               |  1 -
 arch/arm64/include/asm/pgtable.h             |  7 ----
 arch/csky/include/asm/pgtable.h              |  5 ---
 arch/hexagon/include/asm/pgtable.h           |  3 --
 arch/loongarch/include/asm/pgtable.h         |  7 ----
 arch/loongarch/mm/pgtable.c                  |  9 -----
 arch/m68k/include/asm/mcf_pgtable.h          |  6 ---
 arch/m68k/include/asm/motorola_pgtable.h     |  6 ---
 arch/m68k/include/asm/sun3_pgtable.h         |  6 ---
 arch/microblaze/include/asm/pgtable.h        |  8 ----
 arch/mips/include/asm/pgtable.h              |  9 -----
 arch/mips/mm/pgtable-32.c                    | 10 -----
 arch/mips/mm/pgtable-64.c                    |  9 -----
 arch/nios2/include/asm/pgtable.h             |  6 ---
 arch/openrisc/include/asm/pgtable.h          |  2 -
 arch/parisc/include/asm/pgtable.h            |  6 ---
 arch/powerpc/include/asm/book3s/64/pgtable.h |  1 -
 arch/powerpc/include/asm/pgtable.h           |  3 +-
 arch/powerpc/mm/book3s64/pgtable.c           |  5 ---
 arch/riscv/include/asm/pgtable-64.h          |  2 -
 arch/riscv/include/asm/pgtable.h             |  2 -
 arch/s390/include/asm/pgtable.h              | 11 ------
 arch/sh/include/asm/pgtable_32.h             |  8 ----
 arch/sparc/include/asm/pgtable_32.h          | 15 +++-----
 arch/sparc/include/asm/pgtable_64.h          |  2 -
 arch/um/include/asm/pgtable-2level.h         |  1 -
 arch/um/include/asm/pgtable-4level.h         |  9 -----
 arch/um/include/asm/pgtable.h                | 18 ++++-----
 arch/x86/include/asm/pgtable.h               | 21 ++---------
 arch/xtensa/include/asm/pgtable.h            |  6 ---
 fs/dax.c                                     |  3 +-
 include/asm-generic/hugetlb.h                |  5 ---
 include/linux/huge_mm.h                      |  2 -
 include/linux/mm.h                           | 39 ++++++++++++++++++++
 mm/debug_vm_pgtable.c                        | 18 +++------
 mm/huge_memory.c                             | 11 +++---
 mm/hugetlb.c                                 | 18 ++++-----
 mm/khugepaged.c                              |  2 +-
 mm/memory.c                                  | 10 +++--
 mm/userfaultfd.c                             |  2 +-
 44 files changed, 83 insertions(+), 243 deletions(-)

-- 
2.47.2



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2025-04-05 17:07 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-02 18:16 [PATCH v2 00/11] Add folio_mk_pte() Matthew Wilcox (Oracle)
2025-04-02 18:16 ` [PATCH v2 01/11] mm: Set the pte dirty if the folio is already dirty Matthew Wilcox (Oracle)
2025-04-02 18:16 ` [PATCH v2 02/11] mm: Introduce a common definition of mk_pte() Matthew Wilcox (Oracle)
2025-04-02 18:16 ` [PATCH v2 03/11] sparc32: Remove custom " Matthew Wilcox (Oracle)
2025-04-02 18:16 ` [PATCH v2 04/11] x86: " Matthew Wilcox (Oracle)
2025-04-02 18:16 ` [PATCH v2 05/11] um: " Matthew Wilcox (Oracle)
2025-04-02 18:17 ` [PATCH v2 06/11] mm: Make mk_pte() definition unconditional Matthew Wilcox (Oracle)
2025-04-02 18:17 ` [PATCH v2 07/11] mm: Add folio_mk_pte() Matthew Wilcox (Oracle)
2025-04-02 18:17 ` [PATCH v2 08/11] hugetlb: Simplify make_huge_pte() Matthew Wilcox (Oracle)
2025-04-02 18:17 ` [PATCH v2 09/11] mm: Remove mk_huge_pte() Matthew Wilcox (Oracle)
2025-04-02 18:17 ` [PATCH v2 10/11] mm: Add folio_mk_pmd() Matthew Wilcox (Oracle)
2025-04-05 17:07   ` Zi Yan
2025-04-02 18:17 ` [PATCH v2 11/11] arch: Remove mk_pmd() Matthew Wilcox (Oracle)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox