[PATCH] selftests/mm: khugepaged: skip swap tests when no swap available
Alexander Gordeev <[email protected]> Tue, 4 Aug 2026 14:53:51 +0200
| Newsgroups | org.kernel.vger.linux-kselftest,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
When no swap is configured, swap-related tests fail because madvise(MADV_PAGEOUT) does not swap out pages. Add a helper function to detect swap availability and skip these tests. Signed-off-by: Alexander Gordeev <[email protected]> --- tools/testing/selftests/mm/khugepaged.c | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/self= tests/mm/khugepaged.c index 10e8dedcb087..b254baf9e0b7 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -216,6 +216,25 @@ static bool check_swap(void *addr, unsigned long siz= e) return swap; } =20 +static bool is_swap_available(unsigned long size) +{ + unsigned long swap_total =3D 0; + char buffer[256]; + FILE *fp; + + fp =3D fopen("/proc/meminfo", "r"); + if (!fp) + return false; + + while (fgets(buffer, sizeof(buffer), fp)) { + if (sscanf(buffer, "SwapTotal: %lu kB", &swap_total) =3D=3D 1) + break; + } + fclose(fp); + + return swap_total >=3D (size / 1024); +} + static void *alloc_mapping(int nr) { void *p; @@ -734,6 +753,13 @@ static void collapse_swapin_single_pte(struct collap= se_context *c, struct mem_op { void *p; =20 + if (!is_swap_available(page_size)) { + ksft_print_msg("No swap available..."); + skip("Skip"); + ksft_test_result_skip("%s\n", __func__); + return; + } + p =3D ops->setup_area(1); ops->fault(p, 0, hpage_pmd_size); =20 @@ -760,6 +786,13 @@ static void collapse_max_ptes_swap(struct collapse_c= ontext *c, struct mem_ops *o int max_ptes_swap =3D thp_read_num("khugepaged/max_ptes_swap"); void *p; =20 + if (!is_swap_available((max_ptes_swap + 1) * page_size)) { + ksft_print_msg("No swap available..."); + skip("Skip"); + ksft_test_result_skip("%s\n", __func__); + return; + } + p =3D ops->setup_area(1); ops->fault(p, 0, hpage_pmd_size); =20 --=20 2.55.0