[PATCH 12/12] selftests: mm: add shmem mTHP collapse test cases
From: Baolin Wang
Date: Fri Sep 18 2026 - 00:00:47 EST
Add shmem mTHP collapse test cases for 'collapse_full', and 'collapse_single_mthp'
for shmem. All khugepaged test cases passed.
Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
---
tools/testing/selftests/mm/khugepaged.c | 7 +++++--
tools/testing/selftests/mm/run_vmtests.sh | 2 ++
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c
index f82673f5f6b4..a205b7afbc85 100644
--- a/tools/testing/selftests/mm/khugepaged.c
+++ b/tools/testing/selftests/mm/khugepaged.c
@@ -627,6 +627,9 @@ static void mthp_khugepaged_collapse(const char *msg, char *p, int nr_hpages,
if (ops == &__anon_ops) {
settings.thp_enabled = THP_NEVER;
settings.hugepages[collapse_order].enabled = THP_MADVISE;
+ } else if (ops == &__shmem_ops) {
+ settings.shmem_enabled = SHMEM_NEVER;
+ settings.shmem_hugepages[collapse_order].enabled = SHMEM_ADVISE;
}
thp_push_settings(&settings);
@@ -1260,8 +1263,6 @@ static void parse_test_type(int argc, char **argv)
usage();
} else if (!strcmp(buf, "shmem")) {
shmem_ops = &__shmem_ops;
- if (mthp_khugepaged_context)
- usage();
} else {
usage();
}
@@ -1358,6 +1359,7 @@ int main(int argc, char **argv)
TEST(collapse_full, khugepaged_context, read_write_file_write_ops);
TEST(collapse_full, khugepaged_context, shmem_ops);
TEST(collapse_full, mthp_khugepaged_context, anon_ops);
+ TEST(collapse_full, mthp_khugepaged_context, shmem_ops);
TEST(collapse_full, madvise_context, anon_ops);
TEST(collapse_full, madvise_context, read_only_file_ops);
TEST(collapse_full, madvise_context, read_write_file_read_ops);
@@ -1369,6 +1371,7 @@ int main(int argc, char **argv)
TEST(collapse_empty, madvise_context, anon_ops);
TEST(collapse_single_mthp, mthp_khugepaged_context, anon_ops);
+ TEST(collapse_single_mthp, mthp_khugepaged_context, shmem_ops);
TEST(collapse_single_pte_entry, khugepaged_context, anon_ops);
TEST(collapse_single_pte_entry, khugepaged_context, read_only_file_ops);
diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh
index 19755fb4edb9..e1e404a612cc 100755
--- a/tools/testing/selftests/mm/run_vmtests.sh
+++ b/tools/testing/selftests/mm/run_vmtests.sh
@@ -427,6 +427,8 @@ CATEGORY="thp" run_test ./khugepaged -s 4 all:shmem
CATEGORY="thp" run_test ./khugepaged -c 4 mthp_khugepaged:anon
+CATEGORY="thp" run_test ./khugepaged -c 4 mthp_khugepaged:shmem
+
# Try to create XFS if not provided
if [ -z "${SPLIT_HUGE_PAGE_TEST_XFS_PATH}" ]; then
if test_selected "thp"; then
--
2.47.3