Re: [PATCH v5 07/14] mm: shmem: allow THP support determination at folio allocation time
From: Luiz Capitulino
Date: Mon Jun 01 2026 - 08:21:05 EST
On 2026-06-01 08:09, Baolin Wang wrote:
On 5/29/26 10:55 PM, Luiz Capitulino wrote:
In order to enable THP support in shmem today, besides the user
configuration required, the CPU must support PMD-sized pages. This
is the case because of the following has_transparent_hugepage()
usage:
- shmem_parse_one() and shmem_parse_huge(): Check if THP is built-in and
if the CPU supports PMD-sized pages
- shmem_init(): Since the CONFIG_TRANSPARENT_HUGEPAGE guard is outside
the code block calling has_transparent_hugepage(), the
has_transparent_hugepage() call is exclusively checking if the CPU
supports PMD-sized pages
While it's necessary to check if CONFIG_TRANSPARENT_HUGEPAGE is enabled
in all cases, shmem can determine THP size support at folio allocation
time. Therefore, drop the has_transparent_hugepage() usage listed above
while keeping the CONFIG_TRANSPARENT_HUGEPAGE checks.
Additionally, we need to check if PMD size order is supported in
shmem_getattr(). Use pgtable_has_pmd_leaves() for that.
Signed-off-by: Luiz Capitulino <luizcap@xxxxxxxxxx>
---
mm/shmem.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index 88bc0c292f1a..108dc969b92a 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -689,7 +689,7 @@ static int shmem_parse_huge(const char *str)
else
return -EINVAL;
- if (!has_transparent_hugepage() &&
+ if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
huge != SHMEM_HUGE_NEVER && huge != SHMEM_HUGE_DENY)
return -EINVAL;
@@ -1303,6 +1303,8 @@ static int shmem_getattr(struct mnt_idmap *idmap,
generic_fillattr(idmap, request_mask, inode, stat);
orders = shmem_huge_global_enabled(inode, 0, 0, false, NULL, 0);
+ if (!pgtable_has_pmd_leaves())
+ orders &= ~BIT(PMD_ORDER);
Ah, you did in this patch, but this change should belong in patch 14?
If we move it, then this patch will add a temporary issue until patch 14
where shmem_getattr() may report PMD-size for blksize even when the CPU
doesn't support PMD-sized pages.