[PATCH v2 0/2] mm: fix PMD level mTHP accounting bugs

From: Nico Pache

Date: Fri Jul 17 2026 - 02:44:24 EST


While running selftests I noticed the PMD level per-mTHP stats (nr_anon)
remained elevated after each run. After further investigation I noticed
this accounting error occurs for both the migration.private_anon_htlb_test
and the HMM tests.

In the HMM case this is due to folio_add_new_anon_rmap() incrementing the
mTHP stats, but never containing a corresponding decrement in
free_zone_device_folio(). We solve this by making sure to decrement the
counter when freeing device memory.

In the migration case, we are incrementing this counter without first
checking whether this folio is a hugetlb folio, which relies on a separate
accounting system. We solve this by adding the proper hugetlb check before
incrementing this counter.

With these changes in place, the two tests no longer cause elevated PMD
level accounting issues.

Co-developed-by: David Hildenbrand <david@xxxxxxxxxx>
Signed-off-by: David Hildenbrand <david@xxxxxxxxxx>
Signed-off-by: Nico Pache <npache@xxxxxxxxxx>

V2 Changes:
- add RB from Zi
- Drop unnecessary check in __folio_migrate_folio(). HugeTLB has its own
migration system in hugetlbfs_migrate_folio().

V1: https://lore.kernel.org/all/20260702172548.37075-1-npache@xxxxxxxxxx/

Nico Pache (2):
mm: decrement MTHP_STAT_NR_ANON in free_zone_device_folio()
mm/migrate: exclude hugetlb folios from MTHP_STAT_NR_ANON accounting

mm/memremap.c | 1 +
mm/migrate.c | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)


base-commit: e57d6e9e20b551e4910d7a6331a81775c3ad6693
--
2.55.0