mm: introduce pud_is_huge() helper

Patch series "mm: mincore: misc cleanups", v3.

This series cleans up and simplifies the mincore.  Most importantly, it
removes the historical special behavior that always reports VM_PFNMAP
pages as non-resident.


This patch (of 6):

Introduce the pud_is_huge() helper function to check whether a PUD is a
huge PUD or a software leaf entry.  Note that, unlike PMD, PUD currently
does not support transparent migration entries or device private entries. 
However, the function still includes `!pud_none()` branches to accommodate
potential future implementations.

Link: https://lore.kernel.org/20260717091347.1144789-1-wangkefeng.wang@huawei.com
Link: https://lore.kernel.org/20260717091347.1144789-2-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Cc: Jann Horn <jannh@google.com>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Pedro Falcato <pfalcato@suse.de>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Kefeng Wang 2026-07-17 17:13:42 +08:00 committed by Andrew Morton
parent 1605ce99af
commit 8a2081d845

View File

@ -472,6 +472,24 @@ void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,
void __split_huge_pud(struct vm_area_struct *vma, pud_t *pud,
unsigned long address);
/**
* pud_is_huge() - Is this PUD either a huge PUD entry or a software leaf entry?
* @pud: The PUD to check.
*
* This is similar to pmd_is_huge(), but it checks at the PUD level.
*
* Returns: true if this PUD is huge, false otherwise.
*/
static inline bool pud_is_huge(pud_t pud)
{
if (pud_present(pud))
return pud_trans_huge(pud);
else if (!pud_none(pud))
return true;
return false;
}
#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
int change_huge_pud(struct mmu_gather *tlb, struct vm_area_struct *vma,
pud_t *pudp, unsigned long addr, pgprot_t newprot,
@ -798,6 +816,11 @@ static inline bool pmd_is_huge(pmd_t pmd)
{
return false;
}
static inline bool pud_is_huge(pud_t pud)
{
return false;
}
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
static inline bool is_pmd_order(unsigned int order)