Commit 3d95bc21 authored by Baolin Wang's avatar Baolin Wang Committed by Andrew Morton

mm: shmem: add THP validation for PMD-mapped THP related statistics

In order to extend support for mTHP, add THP validation for PMD-mapped THP
related statistics to avoid statistical confusion.

Link: https://lkml.kernel.org/r/c4b04cbd51e6951cc2436a87be8eaa4a1516faec.1718090413.git.baolin.wang@linux.alibaba.comSigned-off-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: default avatarBarry Song <v-songbaohua@oppo.com>
Cc: Daniel Gomez <da.gomez@samsung.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: "Huang, Ying" <ying.huang@intel.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Lance Yang <ioworker0@gmail.com>
Cc: Pankaj Raghav <p.raghav@samsung.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Yang Shi <shy828301@gmail.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 43e027e4
...@@ -1647,7 +1647,7 @@ static struct folio *shmem_alloc_and_add_folio(gfp_t gfp, ...@@ -1647,7 +1647,7 @@ static struct folio *shmem_alloc_and_add_folio(gfp_t gfp,
return ERR_PTR(-E2BIG); return ERR_PTR(-E2BIG);
folio = shmem_alloc_folio(gfp, HPAGE_PMD_ORDER, info, index); folio = shmem_alloc_folio(gfp, HPAGE_PMD_ORDER, info, index);
if (!folio) if (!folio && pages == HPAGE_PMD_NR)
count_vm_event(THP_FILE_FALLBACK); count_vm_event(THP_FILE_FALLBACK);
} else { } else {
pages = 1; pages = 1;
...@@ -1665,7 +1665,7 @@ static struct folio *shmem_alloc_and_add_folio(gfp_t gfp, ...@@ -1665,7 +1665,7 @@ static struct folio *shmem_alloc_and_add_folio(gfp_t gfp,
if (xa_find(&mapping->i_pages, &index, if (xa_find(&mapping->i_pages, &index,
index + pages - 1, XA_PRESENT)) { index + pages - 1, XA_PRESENT)) {
error = -EEXIST; error = -EEXIST;
} else if (huge) { } else if (pages == HPAGE_PMD_NR) {
count_vm_event(THP_FILE_FALLBACK); count_vm_event(THP_FILE_FALLBACK);
count_vm_event(THP_FILE_FALLBACK_CHARGE); count_vm_event(THP_FILE_FALLBACK_CHARGE);
} }
...@@ -2031,7 +2031,8 @@ static int shmem_get_folio_gfp(struct inode *inode, pgoff_t index, ...@@ -2031,7 +2031,8 @@ static int shmem_get_folio_gfp(struct inode *inode, pgoff_t index,
folio = shmem_alloc_and_add_folio(huge_gfp, folio = shmem_alloc_and_add_folio(huge_gfp,
inode, index, fault_mm, true); inode, index, fault_mm, true);
if (!IS_ERR(folio)) { if (!IS_ERR(folio)) {
count_vm_event(THP_FILE_ALLOC); if (folio_test_pmd_mappable(folio))
count_vm_event(THP_FILE_ALLOC);
goto alloced; goto alloced;
} }
if (PTR_ERR(folio) == -EEXIST) if (PTR_ERR(folio) == -EEXIST)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment