| From: Baolin Wang <baolin.wang@linux.alibaba.com> |
| Subject: mm: shmem: add THP validation for PMD-mapped THP related statistics |
| Date: Tue, 11 Jun 2024 18:11:06 +0800 |
| |
| 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 | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| --- a/mm/shmem.c~mm-shmem-add-thp-validation-for-pmd-mapped-thp-related-statistics |
| +++ a/mm/shmem.c |
| @@ -1647,7 +1647,7 @@ static struct folio *shmem_alloc_and_add |
| 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 |
| 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) |
| _ |