Hi, Thank you for review.
On 22/07/2026 1:16 pm, Sarthak Sharma wrote: > Hi Usama! > > On 7/22/26 2:41 PM, Muhammad Usama Anjum wrote: >> collapse_swapin_single_pte and collapse_max_ptes_swap require >> MADV_PAGEOUT to replace anonymous pages with swap entries. On swapless >> systems there is no backing store with which to create those entries, so >> check_swap() reports missing setup rather than broken khugepaged behavior. >> >> Swapless configurations are common on Android and other constrained >> test devices. Failing these cases obscures actionable results from the >> rest of the khugepaged suite. >> >> Check /proc/swaps before either swap-dependent case and skip when no >> active swap area exists. With swap present, retain the existing >> MADV_PAGEOUT and swap-entry assertions unchanged. >> >> Signed-off-by: Muhammad Usama Anjum <[email protected]> >> --- >> tools/testing/selftests/mm/khugepaged.c | 34 +++++++++++++++++++++++++ >> 1 file changed, 34 insertions(+) >> >> diff --git a/tools/testing/selftests/mm/khugepaged.c >> b/tools/testing/selftests/mm/khugepaged.c >> index 10e8dedcb087d..a152cec59fcbd 100644 >> --- a/tools/testing/selftests/mm/khugepaged.c >> +++ b/tools/testing/selftests/mm/khugepaged.c >> @@ -100,6 +100,28 @@ static void skip(const char *msg) >> exit_status = KSFT_SKIP; >> } >> >> +static bool is_swap_enabled(void) >> +{ >> + char buf[MAX_LINE_LENGTH]; >> + FILE *file; >> + bool enabled = false; >> + >> + file = fopen("/proc/swaps", "r"); >> + if (!file) >> + return false; >> + >> + if (!fgets(buf, sizeof(buf), file)) >> + goto out; >> + >> + /* Check for first active swap entry. */ >> + if (fgets(buf, sizeof(buf), file)) >> + enabled = true; >> + >> +out: >> + fclose(file); >> + return enabled; >> +} >> + >> static void save_settings(void) >> { >> ksft_print_msg("Save THP and khugepaged settings..."); >> @@ -734,6 +756,12 @@ static void collapse_swapin_single_pte(struct >> collapse_context *c, struct mem_op >> { >> void *p; >> >> + if (!is_swap_enabled()) { >> + skip("No active swap"); > > Can we prefix this skip message with a #, as recommended for KTAP > output? Right now it is printing like this: It looks like `skip()` is not being prefixed with `#` in this test because of how it is currently used. The `skip()` helper itself should probably be fixed, but that can be handled in a separate follow-up patch. This test is not fully TAP-compliant at the moment: the normal pass/fail output appears to be compliant, while the skip-related messages are not. Would it make sense to address that separately from this series? Also when we run the whole mm suite using ./run_vmtests.sh, it appends an extra # in start of the output which we get by running normal test directly. Its controversial already that we are applying TAP styling to suite level and test level as well. So non-compliant skip in this test makes overall output compliant. > > # Run test: collapse_swapin_single_pte (khugepaged:anon) > No active swap > ok 16 # SKIP collapse_swapin_single_pte > # > # Run test: collapse_swapin_single_pte (madvise:anon) > No active swap > ok 17 # SKIP collapse_swapin_single_pte > # > # Run test: collapse_max_ptes_swap (khugepaged:anon) > No active swap > ok 18 # SKIP collapse_max_ptes_swap > # > # Run test: collapse_max_ptes_swap (madvise:anon) > No active swap > > >> + ksft_test_result_report(exit_status, "%s\n", __func__); >> + return; >> + } >> + >> p = ops->setup_area(1); >> ops->fault(p, 0, hpage_pmd_size); >> >> @@ -760,6 +788,12 @@ static void collapse_max_ptes_swap(struct >> collapse_context *c, struct mem_ops *o >> int max_ptes_swap = thp_read_num("khugepaged/max_ptes_swap"); >> void *p; >> >> + if (!is_swap_enabled()) { >> + skip("No active swap"); > > Same here. > >> + ksft_test_result_report(exit_status, "%s\n", __func__); >> + return; >> + } >> + >> p = ops->setup_area(1); >> ops->fault(p, 0, hpage_pmd_size); >> > -- Thanks, Usama

