Re: [PATCH v4 0/9] mm: thp: always enable mTHP support

From: Lorenzo Stoakes

Date: Thu May 14 2026 - 02:36:11 EST


-cc my previous kernel mail

(Minor annoying reminder to update my email to ljs@xxxxxxxxxx :P)

On Fri, May 01, 2026 at 03:18:42PM -0400, Luiz Capitulino wrote:
> Today, if an architecture implements has_transparent_hugepage() and the CPU
> lacks support for PMD-sized pages, the THP code disables all THP, including
> mTHP. In addition, the kernel lacks a well defined API to check for
> PMD-sized page support. It currently relies on has_transparent_hugepage()
> and thp_disabled_by_hw(), but they are not well defined and are tied to
> THP support.
>
> This series addresses both issues by introducing a new well defined API
> to query PMD-sized page support: pgtable_has_pmd_leaves(). Using this
> new helper, we ensure that mTHP remains enabled even when the
> architecture or CPU doesn't support PMD-sized pages.
>
> Thanks to David Hildenbrand for suggesting this improvement and for
> providing guidance (all bugs and misconceptions are mine).
>
> This applies to Linus tree 08d0d3466664 ("Merge tag 'net-7.1-rc2'
> of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net")
>
> NOTE: I used Claude Code Opus 4.6 to *review* the series before
> posting. It did find one issue where a pgtable_has_pmd_leaves()
> check was missing when assining huge_shmem_orders_inherit in
> shmem_init().
>
> v4
> --
> - Use static key for pgtable_has_pmd_leaves() API (Lance)
> - Moved shmem pgtable_has_pmd_leaves() check to
> shmem_allowable_huge_orders() (Baolin)
> - Default pgtable_has_pmd_leaves() implementation to
> IS_ENABLED(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE) (Zi)
> - Dropped patch “mm: thp: x86: cleanup PSE feature bit usage” (Dave)
>
> v3
> --
> - Rebased on top of latest Linus tree
> - Removed i915 patch as driver dropped has_transparent_hugepage() usage
> - Moved init_arch_has_pmd_leaves() call in start_kernel() to avoid conflict
> with early_param handlers clearing CPU feature flags
> - Fixed build error with CONFIG_MMU=n (kernel test robot)
> - Fixed huge_anon_orders_inherit default setting when !pgtable_pmd_leaves() (Baolin)
> - Small commit changelog improvements
>
> v2
> --
> - Added support for always enabling mTHPs for shmem (Baolin)
> - Improved commits changelog & added reviewed-by
>
> v1
> --
> - Call init_arch_has_pmd_leaves() from start_kernel()
> - Keep pgtable_has_pmd_leaves() calls tied to CONFIG_TRANSPARENT_HUGEPAGE (David)
> - Clear PUD_ORDER when clearing PMD_ORDER (David)
> - Small changelog improvements (David)
> - Rebased on top of latest mm-new
>
> Luiz Capitulino (9):
> docs: tmpfs: remove implementation detail reference
> mm: introduce pgtable_has_pmd_leaves()
> drivers: dax: use pgtable_has_pmd_leaves()
> drivers: nvdimm: use pgtable_has_pmd_leaves()
> mm: debug_vm_pgtable: use pgtable_has_pmd_leaves()
> mm: shmem: drop has_transparent_hugepage() usage
> treewide: introduce arch_has_pmd_leaves()
> mm: replace thp_disabled_by_hw() with pgtable_has_pmd_leaves()
> mm: thp: always enable mTHP support
>
> Documentation/filesystems/tmpfs.rst | 5 ++--
> arch/mips/include/asm/pgtable.h | 4 +--
> arch/mips/mm/tlb-r4k.c | 4 +--
> arch/powerpc/include/asm/book3s/64/hash-4k.h | 2 +-
> arch/powerpc/include/asm/book3s/64/hash-64k.h | 2 +-
> arch/powerpc/include/asm/book3s/64/pgtable.h | 10 ++++----
> arch/powerpc/include/asm/book3s/64/radix.h | 2 +-
> arch/powerpc/mm/book3s64/hash_pgtable.c | 4 +--
> arch/s390/include/asm/pgtable.h | 4 +--
> arch/x86/include/asm/pgtable.h | 4 +--
> drivers/dax/dax-private.h | 2 +-
> drivers/nvdimm/pfn_devs.c | 6 +++--
> include/linux/huge_mm.h | 7 ------
> include/linux/pgtable.h | 19 ++++++++++++--
> init/main.c | 1 +
> mm/debug_vm_pgtable.c | 20 +++++++--------
> mm/huge_memory.c | 25 +++++++++++++------
> mm/memory.c | 11 +++++++-
> mm/shmem.c | 21 +++++++++-------
> 19 files changed, 93 insertions(+), 60 deletions(-)
>
> --
> 2.53.0
>