Re: [PATCH v5 07/14] mm: shmem: allow THP support determination at folio allocation time

From: Baolin Wang

Date: Mon Jun 01 2026 - 22:58:48 EST




On 6/1/26 8:20 PM, Luiz Capitulino wrote:
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.

OK. I see. Feel free to add:

Reviewed-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>