Re: [PATCH] mm/huge_memory: bypass THP tuneables for huge pfnmap mappings

From: SJ Park

Date: Fri Aug 28 2026 - 20:24:40 EST


On Thu, 27 Aug 2026 20:55:57 +0100 "Lorenzo Stoakes (ARM)" <ljs@xxxxxxxxxx> wrote:

> The sysfs THP tuneables at /sys/kernel/mm/transparent_huge_pages/ rather
> confusingly only control the behaviour of THP in some instances.
>
> They are not applicable to MADV_COLLAPSE operations, nor to DAX mappings.
>
> Long-term, THP is predicated upon compaction being able to obtain large
> folios to populate THP ranges.
>
> However, vm_normal_folio() returns NULL for PFN map mappings, thus their
> reference count is maintained by the driver, not core mm.
>
> As a consequence, the folios are not subject to reclaim nor compaction, so
> are not truly part of the THP mechanism at all.
>
> However, since commit 5dd40721f147 ("mm: allow THP orders for PFNMAPs")
> introduced the ability to establish huge PFN maps, they have been subject
> to THP tuneables.
>
> This is incorrect - if a huge PFN map is available (defined by
> vma->vm_ops->huge_fault being non-NULL for a VMA_PFNMAP_BIT VMA), then it
> should be mapped huge upon fault-in.
>
> Correct this by explicitly checking for this while ensuring that smaps
> continues to accurately report THPeligible statistics.
>
> While here, abstract the entire file-backed THP check in
> vma_can_map_huge_file(), with sensible separation of logic into helper
> functions.
>
> Note that drm_gem_shmem_mmap() and panthor_gem_mmap() establish huge PFN
> maps of shmem folios, however they are marked unevictable in
> drm_gem_get_pages(), and in any case would fail the reference check in
> __remove_mapping() even if they weren't.
>
> Failing to map huge PFN maps has resulted in significant real-world
> performance degradation, see links for details.

All make sense the code looks correct to me.

>
> Reported-by: Cedric Le Goater <clg@xxxxxxxxxx>
> Closes: https://lore.kernel.org/linux-mm/20260805055544.1568534-1-clg@xxxxxxxxxx/
> Reported-by: Saravanan D <saravanand@xxxxxxxxx>
> Closes: https://lore.kernel.org/linux-mm/20260821070520.25759-1-saravanand@xxxxxxxxx/
> Fixes: 5dd40721f147 ("mm: allow THP orders for PFNMAPs")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Lorenzo Stoakes (ARM) <ljs@xxxxxxxxxx>

Reviewed-by: SJ Park <sj@xxxxxxxxxx>

I also support Zi's naming change suggestions.


Thanks,
SJ

[...]