From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Chris Down <chris@chrisdown.name>,
Andrew Morton <akpm@linux-foundation.org>
Cc: Mike Rapoport <rppt@kernel.org>, Peter Xu <peterx@redhat.com>,
Lorenzo Stoakes <ljs@kernel.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Vlastimil Babka <vbabka@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>, Shuah Khan <shuah@kernel.org>,
Matthew Wilcox <willy@infradead.org>,
kernel-team@fb.com, linux-mm@kvack.org,
linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] selftests/mm: Add UFFDIO_MOVE huge zeropage PMD regression test
Date: Thu, 19 Mar 2026 20:34:27 +0100 [thread overview]
Message-ID: <fc8d70a9-6ca7-4f64-9e24-d88ef9840209@kernel.org> (raw)
In-Reply-To: <abongwF3X0G8xY1I@chrisdown.name>
On 3/18/26 05:18, Chris Down wrote:
> The existing uffd-unit-tests move-pmd coverage exercises PMD-sized
> UFFDIO_MOVE on anonymous THPs, but it does not force the huge zeropage
> PMD path in move_pages_huge_pmd().
>
> Add a dedicated anonymous UFFDIO_MOVE PMD test that exercises this
> relatively comprehensively.
>
> Signed-off-by: Chris Down <chris@chrisdown.name>
> ---
> tools/testing/selftests/mm/uffd-unit-tests.c | 100 +++++++++++++++++++
> tools/testing/selftests/mm/vm_util.c | 12 +++
> tools/testing/selftests/mm/vm_util.h | 1 +
> 3 files changed, 113 insertions(+)
>
> diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing/selftests/mm/uffd-unit-tests.c
> index 6f5e404a446c..9cc4cbab9a23 100644
> --- a/tools/testing/selftests/mm/uffd-unit-tests.c
> +++ b/tools/testing/selftests/mm/uffd-unit-tests.c
> @@ -1227,6 +1227,99 @@ static void uffd_move_pmd_test(uffd_global_test_opts_t *gopts, uffd_test_args_t
> uffd_move_pmd_handle_fault);
> }
>
> +static void uffd_move_pmd_huge_zeropage_test(uffd_global_test_opts_t *gopts,
> + uffd_test_args_t *targs)
> +{
> + unsigned long pmd_size = read_pmd_pagesize();
> + unsigned long pmd_pages;
> + unsigned long bytes = gopts->nr_pages * gopts->page_size;
> + char *orig_area_src = gopts->area_src, *orig_area_dst = gopts->area_dst;
> + char *aligned_src, *aligned_dst;
> + unsigned long src_offs, dst_offs, max_offs;
> + pthread_t uffd_mon;
> + struct uffd_args args = { 0 };
> + char c = '\0';
> + int pagemap_fd;
> +
> + if (pmd_size <= gopts->page_size) {
> + uffd_test_skip("huge page size is 0, feature missing?");
Wouldn't a check for 0 be
"!pmd_size" ? :)
But yes, this is unexpected. Maybe simply
"Could not detect PMD size"
> + return;
> + }
> + if (!detect_huge_zeropage()) {
> + uffd_test_skip("transparent huge zeropage disabled");
> + return;
> + }
> +
> + pmd_pages = pmd_size / gopts->page_size;
Might consider s/pmd_pages/nr_pages_per_pmd/
[...]
>
> +bool pagemap_is_huge_zero(int fd, char *start)
> +{
> + uint64_t categories;
> +
> + if (!pagemap_scan_supported(fd, start))
> + return false;
> +
> + categories = pagemap_scan_get_categories(fd, start);
A slightly nicer way to write it might be
const uint64_t expected = PAGE_IS_PRESENT | PAGE_IS_PFNZERO | PAGE_IS_HUGE;
...
return (categories & expected) == huge_zero;
In general, lgtm, thanks!
--
Cheers,
David
prev parent reply other threads:[~2026-03-19 19:34 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-18 4:18 [PATCH v3] selftests/mm: Add UFFDIO_MOVE huge zeropage PMD regression test Chris Down
2026-03-19 15:42 ` Mike Rapoport
2026-03-19 19:34 ` David Hildenbrand (Arm) [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fc8d70a9-6ca7-4f64-9e24-d88ef9840209@kernel.org \
--to=david@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=chris@chrisdown.name \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=peterx@redhat.com \
--cc=rppt@kernel.org \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox