From: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
To: "David Hildenbrand (Red Hat)" <david@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Liam R . Howlett" <Liam.Howlett@oracle.com>,
Vlastimil Babka <vbabka@suse.cz>, Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>, Jann Horn <jannh@google.com>,
Pedro Falcato <pfalcato@suse.de>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] testing/selftests/mm: add soft-dirty merge self-test
Date: Mon, 17 Nov 2025 15:15:39 +0000 [thread overview]
Message-ID: <c5c31abd-98ee-4f10-8990-0f935035b3c3@lucifer.local> (raw)
In-Reply-To: <5c1ef450-c9ba-4249-9eda-b38efbd76c3f@kernel.org>
On Mon, Nov 17, 2025 at 03:44:46PM +0100, David Hildenbrand (Red Hat) wrote:
> On 14.11.25 18:53, Lorenzo Stoakes wrote:
> > Assert that we correctly merge VMAs containing VM_SOFTDIRTY flags now that
> > we correctly handle these as sticky.
> >
> > In order to do so, we have to account for the fact the pagemap interface
> > checks soft dirty PTEs and additionally that newly merged VMAs are marked
> > VM_SOFTDIRTY.
> >
> > To account for this we use unfaulted anon VMAs, mapping one VMA in and
> > clearing soft-dirty, then another separate from the first which will be
> > marked soft-dirty which we then mremap() into place.
> >
> > Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > ---
> > tools/testing/selftests/mm/soft-dirty.c | 51 ++++++++++++++++++++++++-
> > 1 file changed, 50 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/testing/selftests/mm/soft-dirty.c b/tools/testing/selftests/mm/soft-dirty.c
> > index 4ee4db3750c1..bb29edb1e2a3 100644
> > --- a/tools/testing/selftests/mm/soft-dirty.c
> > +++ b/tools/testing/selftests/mm/soft-dirty.c
> > @@ -184,6 +184,54 @@ static void test_mprotect(int pagemap_fd, int pagesize, bool anon)
> > close(test_fd);
> > }
> > +static void test_merge(int pagemap_fd, int pagesize)
> > +{
> > + char *reserved, *map, *map2;
> > +
> > + /* Reserve space. */
>
> It took me a while to figure out why you are using 4 pages. I guess you want
> to make sure that we don't end up merging to the left (or the right). A
> diagram would have helped me.
I have spoiled everybody too much with my ASCII diagrams ;)
But _just for you_ I will make one again ;))
>
> > + reserved = mmap(NULL, 4 * pagesize, PROT_NONE,
> > + MAP_ANON | MAP_PRIVATE, -1, 0);
> > + if (reserved == MAP_FAILED)
> > + ksft_exit_fail_msg("mmap failed\n");
> > + munmap(reserved, 4 * pagesize);
> > +
> > + /* Map a page. */
>
> Note that we are not actually "mapping a page". "Create a new page-sized
> VMA" or sth like that.
Lol depends on your definition I suppose. Not in the sense of page table
mappings. I guess this is fairly redundant anyway so can dorp
>
> > + map = mmap(&reserved[pagesize], pagesize, PROT_READ | PROT_WRITE,
> > + MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0);
> > + if (map == MAP_FAILED)
> > + ksft_exit_fail_msg("mmap failed\n");
> > +
> > + /* This will clear VM_SOFTDIRTY too. */
> > + clear_softdirty();
> > +
> > + /*
> > + * Now place a new mapping which will be marked VM_SOFTDIRTY. Away from
> > + * map.
>
> Could we have something "to the right" of this new VMA that we might be
> merging with (that might interfere?) and if so, do we care?
>
> Just wondering if we would actually want a reserved area that spans 5 page
> sizes to rule out these cases.
>
You're right! This is an oversight, will fix.
> mmap1
>
> [ empty ][ VMA1 ][ empty ]
>
> mmap2
>
> [ empty ][ VMA1 ][ empty ][ VMA2 ][ empty ]
>
> mremap
>
> [ empty ][ VMA1 ][ VMA2 ][ empty ]
>
> which is after the merge
>
> [ empty ][ VMA (SD) ][ ]
Yeah this is the purpose of adding space around.
I also want to add an additional test anyway so can do both things at once
:)
>
>
> --
> Cheers
>
> David
Cheers, Lorenzo
next prev parent reply other threads:[~2025-11-17 15:15 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-14 17:53 [PATCH 0/2] make VM_SOFTDIRTY a sticky VMA flag Lorenzo Stoakes
2025-11-14 17:53 ` [PATCH 1/2] mm: propagate VM_SOFTDIRTY on merge Lorenzo Stoakes
2025-11-17 4:39 ` Anshuman Khandual
2025-11-17 11:34 ` Lorenzo Stoakes
2025-11-17 14:25 ` David Hildenbrand (Red Hat)
2025-11-17 15:35 ` Lorenzo Stoakes
2025-11-17 15:47 ` Pedro Falcato
2025-11-17 15:53 ` Lorenzo Stoakes
2025-11-17 16:05 ` Liam R. Howlett
2025-11-14 17:53 ` [PATCH 2/2] testing/selftests/mm: add soft-dirty merge self-test Lorenzo Stoakes
2025-11-17 14:44 ` David Hildenbrand (Red Hat)
2025-11-17 15:15 ` Lorenzo Stoakes [this message]
2025-11-14 21:53 ` [PATCH 0/2] make VM_SOFTDIRTY a sticky VMA flag Andrew Morton
2025-11-17 11:41 ` Lorenzo Stoakes
2025-11-17 0:53 ` Andrei Vagin
2025-11-17 4:37 ` Anshuman Khandual
2025-11-17 11:32 ` Lorenzo Stoakes
2025-11-17 18:26 ` Andrei Vagin
2025-11-17 19:57 ` Lorenzo Stoakes
2025-11-19 13:09 ` Cyrill Gorcunov
2025-11-19 17:21 ` Lorenzo Stoakes
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=c5c31abd-98ee-4f10-8990-0f935035b3c3@lucifer.local \
--to=lorenzo.stoakes@oracle.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=jannh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=pfalcato@suse.de \
--cc=rppt@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
/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