Re: [PATCH v4 16/20] tools/testing/selftests/mm: test anonymous page offset merge behaviour

"Lorenzo Stoakes (ARM)" <[email protected]>
Newsgroups org.kernel.vger.linux-fsdevel,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-xe,org.kernel.vger.kvm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-s390,org.kernel.vger.linux-trace-kernel,org.kvack.linux-mm
Message-ID <antWw3a0iEv4l1Yd@gremlin>
On Tue, Aug 11, 2026 at 06:56:18PM +0200, David Hildenbrand (Arm) wrote:
> On 8/6/26 22:21, Lorenzo Stoakes (ARM) wrote:
> > While maintaining anonymous page offsets for VMAs has no impact for most
> > merge cases, it does impact MAP_PRIVATE-mapped file-backed mappings which
> > happen to have matching page offset but not matching anonymous page offset.
> >
> > Assert this behaviour by attempting to map an unfaulted MAP_PRIVATE-memfd
> > region with a faulted one with compatible file page offsets but
> > incompatible anonymous page offsets.
> >
> > Signed-off-by: Lorenzo Stoakes (ARM) <[email protected]>
> > ---
> >  tools/testing/selftests/mm/merge.c | 57 ++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 57 insertions(+)
> >
> > diff --git a/tools/testing/selftests/mm/merge.c b/tools/testing/selftests/mm/merge.c
> > index 519e5ac02db7..cb7cdb6b7ada 100644
> > --- a/tools/testing/selftests/mm/merge.c
> > +++ b/tools/testing/selftests/mm/merge.c
> > @@ -1305,6 +1305,63 @@ TEST_F(merge, merge_vmas_with_mseal)
> >  	ASSERT_EQ(procmap->query.vma_end, (unsigned long)ptr + 2 * page_size);
> >  }
> >
> > +TEST_F(merge, anon_and_page_offset_mismatch_memfd)
> > +{
> > +	struct procmap_fd *procmap = &self->procmap;
> > +	unsigned int page_size = self->page_size;
> > +	char *carveout = self->carveout;
> > +	char *ptr, *ptr2;
> > +	int fd;
> > +
> > +	/* Create a 10 page memfd descriptor. */
> > +	fd = memfd_create("anon_page_offset_test", MFD_CLOEXEC);
> > +	ASSERT_NE(fd, -1);
> > +	ASSERT_EQ(ftruncate(fd, 10 * page_size), 0);
> > +
> > +	/* Map a region using the memfd at page offset 0. */
> > +	ptr = mmap(carveout, 5 * page_size, PROT_READ | PROT_WRITE,
> > +		   MAP_FIXED | MAP_PRIVATE, fd, 0);
> > +	ASSERT_NE(ptr, MAP_FAILED);
> > +
> > +	/*
> > +	 * Map another separately, and fault in, at page offset 5:
> > +	 *
>
> "Fault in" is imprecise, as a read-fault won't do. "Trigger a CoW fault." might
> be better.

Andrew - could you fix up? Thanks :)

>
>
> Acked-by: David Hildenbrand (Arm) <[email protected]>

Thanks!

>
> --
> Cheers,
>
> David

--
Cheers, Lorenzo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.