kselftest-mm-integrate-huge-page-checks.patch removed from -mm tree
The quilt patch titled
Subject: kselftest: mm: integrate huge page checks
has been removed from the -mm tree. Its filename was
kselftest-mm-integrate-huge-page-checks.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Yeoreum Yun <[email protected]>
Subject: kselftest: mm: integrate huge page checks
Date: Thu, 01 Oct 2026 22:17:53 +0100
check_large_folios() only checks for large folios without distinguishing between anonymous and file-backed huge pages.
To add huge page type checking, integrate the huge page checks into __check_huge() and __check_type():
1. If hpage_size == pmd_pagesize, check PAGE_IS_HUGE instead of using check_large_folios(), since only the mapping type matters. This identifies PMD-mapped huge pages.
2. Otherwise, use check_large_folios() to detect large folios. This covers mTHP cases.
3. Check the folio flags according to the huge page type via
__check_type()
---
tools/testing/selftests/mm/vm_util.c | 90 +++++++++++++++---------- 1 file changed, 56 insertions(+), 34 deletions(-)
tools/testing/selftests/mm/vm_util.c renamed from tools/testing/selftests/mm/vm_util.c~kselftest-mm-integrate-huge-page-checks +56 -34
@@ -392,76 +392,98 @@ out:return ret; } -enum check_huge_type { -CHECK_HUGE_ANON , -CHECK_HUGE_FILE , +enum check_type { +CHECK_TYPE_ANON , +CHECK_TYPE_FILE , }; -static bool check_huge_type (uint64_t categories,enum check_huge_type type) +static bool __check_type (void *addr,size_t len,uint64_t page_size, +enum check_type type) { -const bool file = categories &PAGE_IS_FILE ; +bool ret = false; +int pagemap_fd; +char *start = addr; +char *end = start + len; +uint64_t categories; + + pagemap_fd =open (PAGEMAP_PATH ,O_RDONLY ); +if (pagemap_fd <0 ) +ksft_exit_fail_perror ("open pagemap" ); -switch (type) { -case CHECK_HUGE_ANON : -return !file; -case CHECK_HUGE_FILE : -return file; +for (; start < end; start += page_size) { + categories =pagemap_scan_get_categories (pagemap_fd, start); +if ((categories &PAGE_IS_PRESENT ) !=PAGE_IS_PRESENT ) +continue ; + +if ((type ==CHECK_TYPE_FILE ) != !!(categories &PAGE_IS_FILE )) + goto out; } -return false; + ret = true; + +out: +close (pagemap_fd); +return ret; } -static bool __check_pmd_huge (void *addr,size_t len,int nr_hpages, -uint64_t hpage_size,enum check_huge_type type) +static bool __check_huge (void *addr,size_t len,int nr_hpages, +uint64_t hpage_size) { +bool ret = false;int pagemap_fd;int nr_pmd_mappings =0 ; +uint64_t pmd_pagesize;uint64_t categories;char *start = addr;char *end = start + len; + pmd_pagesize =read_pmd_pagesize (); +if (!pmd_pagesize) +ksft_exit_fail_msg ("reading PMD pagesize failed\n" ); + pagemap_fd =open (PAGEMAP_PATH ,O_RDONLY );if (pagemap_fd <0 )ksft_exit_fail_perror ("open pagemap" ); +if (hpage_size != pmd_pagesize) { + ret =check_large_folios (addr, len, nr_hpages, hpage_size); + goto out; + } +for (; start < end; start += hpage_size) { categories =pagemap_scan_get_categories (pagemap_fd, start); -if (!(categories &PAGE_IS_HUGE )) -continue ; -if (check_huge_type (categories, type)) +if (categories &PAGE_IS_HUGE ) nr_pmd_mappings++; } -close (pagemap_fd); -return nr_hpages == nr_pmd_mappings; +if (nr_pmd_mappings != nr_hpages) + goto out; + + ret = true; + +out: +close (pagemap_fd); +return ret; }bool check_huge_anon (void *addr,size_t len,int nr_hpages,uint64_t hpage_size) { -uint64_t pmd_pagesize =read_pmd_pagesize (); - -if (!pmd_pagesize) -ksft_exit_fail_msg ("reading PMD pagesize failed\n" ); +const uint64_t scan_mapping_size = (nr_hpages >0 ) ? hpage_size :psize (); -if (hpage_size == pmd_pagesize) -return __check_pmd_huge (addr, len, nr_hpages, hpage_size, -CHECK_HUGE_ANON ); +if (!__check_huge (addr, len, nr_hpages, hpage_size)) +return false; -return check_large_folios (addr, len, nr_hpages, hpage_size); +return __check_type (addr, len, scan_mapping_size,CHECK_TYPE_ANON ); }bool check_huge_file (void *addr,size_t len,int nr_hpages,uint64_t hpage_size) { -uint64_t pmd_pagesize =read_pmd_pagesize (); - -if (!pmd_pagesize) -ksft_exit_fail_msg ("reading PMD pagesize failed\n" ); +const uint64_t scan_mapping_size = (nr_hpages >0 ) ? hpage_size :psize (); -if (hpage_size == pmd_pagesize) -return __check_pmd_huge (addr, len, nr_hpages, hpage_size, -CHECK_HUGE_FILE ); +if (!__check_huge (addr, len, nr_hpages, hpage_size)) +return false; -return check_large_folios (addr, len, nr_hpages, hpage_size); +return __check_type (addr, len, scan_mapping_size,CHECK_TYPE_FILE ); }bool check_huge_shmem (void *addr,size_t len,int nr_hpages,uint64_t hpage_size)
_
Patches currently in -mm which might be from [email protected] are