Re: [PATCH v8 09/14] powerpc: move has_transparent_hugepage() out of THP guard

From: David Hildenbrand (Arm)

Date: Fri Oct 02 2026 - 15:29:17 EST


On 9/18/26 03:45, Luiz Capitulino wrote:
> A future commit will introduce a kernel API to allow for checking if the
> CPU supports PMD-sized pages. This API will be based on the
> has_transparent_hugepage() implementation but will be orthogonal to THP
> and therefore must work when CONFIG_TRANSPARENT_HUGEPAGE=n.
>
> Move its definition out of the THP guard.
>
> Signed-off-by: Luiz Capitulino <luizcap@xxxxxxxxxx>
> ---
> 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 | 18 +++++++++---------
> arch/powerpc/include/asm/book3s/64/radix.h | 14 +++++++-------
> arch/powerpc/mm/book3s64/hash_pgtable.c | 4 ++--
> 5 files changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/book3s/64/hash-4k.h b/arch/powerpc/include/asm/book3s/64/hash-4k.h
> index 8e5bd9902bed..79511e6abfca 100644
> --- a/arch/powerpc/include/asm/book3s/64/hash-4k.h
> +++ b/arch/powerpc/include/asm/book3s/64/hash-4k.h
> @@ -165,9 +165,9 @@ extern void hash__pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
> extern pgtable_t hash__pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
> extern pmd_t hash__pmdp_huge_get_and_clear(struct mm_struct *mm,
> unsigned long addr, pmd_t *pmdp);
> -extern int hash__has_transparent_hugepage(void);
> #endif
>
> +extern int hash__has_transparent_hugepage(void);
> #endif /* !__ASSEMBLER__ */
>
> #endif /* _ASM_POWERPC_BOOK3S_64_HASH_4K_H */
> diff --git a/arch/powerpc/include/asm/book3s/64/hash-64k.h b/arch/powerpc/include/asm/book3s/64/hash-64k.h
> index 7deb3a66890b..a4a44a112ff9 100644
> --- a/arch/powerpc/include/asm/book3s/64/hash-64k.h
> +++ b/arch/powerpc/include/asm/book3s/64/hash-64k.h
> @@ -278,9 +278,9 @@ extern void hash__pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
> extern pgtable_t hash__pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
> extern pmd_t hash__pmdp_huge_get_and_clear(struct mm_struct *mm,
> unsigned long addr, pmd_t *pmdp);
> -extern int hash__has_transparent_hugepage(void);

Without some of these helpers in place, I assume actually using PMD leafs
without THP would require some more work. (which is not the goal of this series,
just asking).

I do wonder whether the architecture should instead simply say "not supported"
if !CONFIG_TRANSPARENT_HUGEPAGE?

That should still enable your series: using mTHP without PMD support.

[...]

>
> -static inline int radix__has_transparent_hugepage(void)
> +static inline int radix__has_transparent_pud_hugepage(void)
> {
> - /* For radix 2M at PMD level means thp */
> - if (mmu_psize_defs[MMU_PAGE_2M].shift == PMD_SHIFT)
> + /* For radix 1G at PUD level means pud hugepage support */
> + if (mmu_psize_defs[MMU_PAGE_1G].shift == PUD_SHIFT)
> return 1;
> return 0;
> }
> +#endif
>
> -static inline int radix__has_transparent_pud_hugepage(void)
> +static inline int radix__has_transparent_hugepage(void)
> {
> - /* For radix 1G at PUD level means pud hugepage support */
> - if (mmu_psize_defs[MMU_PAGE_1G].shift == PUD_SHIFT)
> + /* For radix 2M at PMD level means thp */
> + if (mmu_psize_defs[MMU_PAGE_2M].shift == PMD_SHIFT)
> return 1;
> return 0;
> }

You are swapping both implementations, which might create some unnecessary churn
I think.

--
Cheers,

David