]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm: shmem: add THP validation for PMD-mapped THP related statistics
authorBaolin Wang <baolin.wang@linux.alibaba.com>
Tue, 11 Jun 2024 10:11:06 +0000 (18:11 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 4 Jul 2024 02:30:03 +0000 (19:30 -0700)
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.com
Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: Barry 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: Andrew Morton <akpm@linux-foundation.org>
mm/shmem.c

index 3e7d60d71d312414290dda9fef1dd74c64c34304..bf22909f1261caa7e4f22303327b8b1173a66b73 100644 (file)
@@ -1647,7 +1647,7 @@ static struct folio *shmem_alloc_and_add_folio(gfp_t gfp,
                        return ERR_PTR(-E2BIG);
 
                folio = shmem_alloc_folio(gfp, HPAGE_PMD_ORDER, info, index);
-               if (!folio)
+               if (!folio && pages == HPAGE_PMD_NR)
                        count_vm_event(THP_FILE_FALLBACK);
        } else {
                pages = 1;
@@ -1665,7 +1665,7 @@ static struct folio *shmem_alloc_and_add_folio(gfp_t gfp,
                if (xa_find(&mapping->i_pages, &index,
                                index + pages - 1, XA_PRESENT)) {
                        error = -EEXIST;
-               } else if (huge) {
+               } else if (pages == HPAGE_PMD_NR) {
                        count_vm_event(THP_FILE_FALLBACK);
                        count_vm_event(THP_FILE_FALLBACK_CHARGE);
                }
@@ -2031,7 +2031,8 @@ repeat:
                folio = shmem_alloc_and_add_folio(huge_gfp,
                                inode, index, fault_mm, true);
                if (!IS_ERR(folio)) {
-                       count_vm_event(THP_FILE_ALLOC);
+                       if (folio_test_pmd_mappable(folio))
+                               count_vm_event(THP_FILE_ALLOC);
                        goto alloced;
                }
                if (PTR_ERR(folio) == -EEXIST)