Re: [PATCH v4 16/20] tools/testing/selftests/mm: test anonymous page offset merge behaviour
"David Hildenbrand (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 | <[email protected]> |
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. Acked-by: David Hildenbrand (Arm) <[email protected]> -- Cheers, David