On Wed, Sep 02, 2026 at 04:15:17PM +0100, Lorenzo Stoakes (ARM) wrote:
> Maybe call it disable_khugepaged() to make it explicit that's what this is
> doing
> rather than eliminating any THP pages in the range?
>
> > +{
>
> Maybe a comment here like:
>
> /*
> * Disables khugepaged from collapsing THPs in range, existing THP
> * pages remain.
> */
>
Oh and with these changes you can delete all of the:
/* Prevent khugepaged from collapsing the pages. */
Comments below as they will be implied by the name and explained by the comment
:)
Thanks!
> > + if (!madvise(addr, len, MADV_NOHUGEPAGE))
> > + return;
> > +
> > + ksft_exit_fail_msg("MADV_NOHUGEPAGE failed, err=%d\n", errno);
> > +}
> > +
> > static void verify_rss_anon_split_huge_page_all_zeroes(char *one_page, int
> > nr_hpages, size_t len)
> > {
> > unsigned long rss_anon_before, rss_anon_after;
> > @@ -180,6 +188,9 @@ static void
> > verify_rss_anon_split_huge_page_all_zeroes(char *one_page, int nr_hp
> > if (!rss_anon_before)
> > ksft_exit_fail_msg("No RssAnon is allocated before split\n");
> >
> > + /* Prevent khugepaged from collapsing the pages. */
> > + madv_nohuge(one_page, len);
> > +
> > /* split all THPs */
> > write_debugfs(PID_FMT, getpid(), (uint64_t)one_page,
> > (uint64_t)one_page + len, 0);
> > @@ -227,6 +238,9 @@ static void split_pmd_thp_to_order(int order)
> > if (!check_huge_anon(one_page, 4 * pmd_pagesize, 4, pmd_pagesize))
> > ksft_exit_fail_msg("No THP is allocated\n");
> >
> > + /* Prevent khugepaged from collapsing the pages. */
> > + madv_nohuge(one_page, len);
> > +
> > /* split all THPs */
> > write_debugfs(PID_FMT, getpid(), (uint64_t)one_page,
> > (uint64_t)one_page + len, order);
> > @@ -275,6 +289,9 @@ static void split_pte_mapped_thp(void)
> > goto out;
> > }
> >
> > + /* Prevent khugepaged from collapsing the pages. */
> > + madv_nohuge(thp_area, thp_area_size);
> > +
> > /*
> > * To challenge spitting code, we will mremap a single page of each
> > * THP (page[i] of thp[i]) in the thp_area into page_area. This will
> > @@ -542,6 +559,8 @@ static int create_pagecache_thp_and_fd(const char
> > *testfile, size_t fd_size,
> > ksft_test_result_skip("Pagecache folio split skipped\n");
> > return -2;
> > }
> > + /* Prevent khugepaged from collapsing the pages. */
> > + madv_nohuge(*addr, fd_size);
> > return 0;
> > err_out_close:
> > close(*fd);
> >
> > --
> > 2.43.0
> >
>
> --
> Cheers, Lorenzo
--
Cheers, Lorenzo