From: "Mike Rapoport (Microsoft)" <[email protected]> A comment in collapse_single_pte_entry_compound() says it can't run on shmem because "MADV_DONTNEED can't evict tmpfs pages". But MADV_REMOVE can!
Use MADV_REMOVE for tmpfs to evict pages and enable collapse_single_pte_entry_compound() test for shmem. Signed-off-by: Mike Rapoport (Microsoft) <[email protected]> --- tools/testing/selftests/mm/khugepaged.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c index 3fe7ef04ac62..e6fb01ca44ed 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -783,20 +783,17 @@ static void collapse_max_ptes_swap(struct collapse_context *c, struct mem_ops *o static void collapse_single_pte_entry_compound(struct collapse_context *c, struct mem_ops *ops) { + int advise = MADV_DONTNEED; void *p; p = alloc_hpage(ops); - if (is_tmpfs(ops)) { - /* MADV_DONTNEED won't evict tmpfs pages */ - printf("tmpfs..."); - skip("Skip"); - goto skip; - } + if (is_tmpfs(ops)) + advise = MADV_REMOVE; madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE); printf("Split huge page leaving single PTE mapping compound page..."); - madvise(p + page_size, hpage_pmd_size - page_size, MADV_DONTNEED); + madvise(p + page_size, hpage_pmd_size - page_size, advise); if (ops->check_huge(p, 0)) success("OK"); else @@ -805,7 +802,6 @@ static void collapse_single_pte_entry_compound(struct collapse_context *c, struc c->collapse("Collapse PTE table with single PTE mapping compound page", p, 1, ops, true); validate_memory(p, 0, page_size); -skip: ops->cleanup_area(p, hpage_pmd_size); } @@ -1251,8 +1247,10 @@ int main(int argc, char **argv) TEST(collapse_single_pte_entry_compound, khugepaged_context, anon_ops); TEST(collapse_single_pte_entry_compound, khugepaged_context, file_ops); + TEST(collapse_single_pte_entry_compound, khugepaged_context, shmem_ops); TEST(collapse_single_pte_entry_compound, madvise_context, anon_ops); TEST(collapse_single_pte_entry_compound, madvise_context, file_ops); + TEST(collapse_single_pte_entry_compound, madvise_context, shmem_ops); TEST(collapse_full_of_compound, khugepaged_context, anon_ops); TEST(collapse_full_of_compound, khugepaged_context, file_ops); -- 2.53.0

