linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
@ 2025-06-03  1:31 Barry Song
  2025-06-03  6:04 ` Anshuman Khandual
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Barry Song @ 2025-06-03  1:31 UTC (permalink / raw)
  To: akpm, linux-mm
  Cc: linux-kernel, Barry Song, Liam R. Howlett, Lorenzo Stoakes,
	David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng

From: Barry Song <v-songbaohua@oppo.com>

We've already found the VMA before calling madvise_free_single_vma(),
so calling walk_page_range() and doing find_vma() again seems
unnecessary. It also prevents potential optimizations for MADV_FREE
to use a per-VMA lock.

Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Jann Horn <jannh@google.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Lokesh Gidra <lokeshgidra@google.com>
Cc: Tangquan Zheng <zhengtangquan@oppo.com>
Signed-off-by: Barry Song <v-songbaohua@oppo.com>
---
 mm/madvise.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/madvise.c b/mm/madvise.c
index d408ffa404b3..c6a28a2d3ff8 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
 
 	mmu_notifier_invalidate_range_start(&range);
 	tlb_start_vma(tlb, vma);
-	walk_page_range(vma->vm_mm, range.start, range.end,
+	walk_page_range_vma(vma, range.start, range.end,
 			&madvise_free_walk_ops, tlb);
 	tlb_end_vma(tlb, vma);
 	mmu_notifier_invalidate_range_end(&range);
-- 
2.39.3 (Apple Git-146)



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  1:31 [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma() Barry Song
@ 2025-06-03  6:04 ` Anshuman Khandual
  2025-06-03  6:11 ` Dev Jain
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Anshuman Khandual @ 2025-06-03  6:04 UTC (permalink / raw)
  To: Barry Song, akpm, linux-mm
  Cc: linux-kernel, Barry Song, Liam R. Howlett, Lorenzo Stoakes,
	David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng

On 6/3/25 07:01, Barry Song wrote:
> From: Barry Song <v-songbaohua@oppo.com>
> 
> We've already found the VMA before calling madvise_free_single_vma(),
> so calling walk_page_range() and doing find_vma() again seems
> unnecessary. It also prevents potential optimizations for MADV_FREE
> to use a per-VMA lock.
> 
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Jann Horn <jannh@google.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Lokesh Gidra <lokeshgidra@google.com>
> Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> Signed-off-by: Barry Song <v-songbaohua@oppo.com>
> ---
>  mm/madvise.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/madvise.c b/mm/madvise.c
> index d408ffa404b3..c6a28a2d3ff8 100644
> --- a/mm/madvise.c
> +++ b/mm/madvise.c
> @@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
>  
>  	mmu_notifier_invalidate_range_start(&range);
>  	tlb_start_vma(tlb, vma);
> -	walk_page_range(vma->vm_mm, range.start, range.end,
> +	walk_page_range_vma(vma, range.start, range.end,
>  			&madvise_free_walk_ops, tlb);
>  	tlb_end_vma(tlb, vma);
>  	mmu_notifier_invalidate_range_end(&range);

This indeed looks like an improvement dropping a redundant VMA look up
and also opening up potential optimization later using per-VMA lock.

Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  1:31 [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma() Barry Song
  2025-06-03  6:04 ` Anshuman Khandual
@ 2025-06-03  6:11 ` Dev Jain
  2025-06-03  8:47   ` Barry Song
  2025-06-03  7:44 ` David Hildenbrand
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Dev Jain @ 2025-06-03  6:11 UTC (permalink / raw)
  To: Barry Song, akpm, linux-mm
  Cc: linux-kernel, Barry Song, Liam R. Howlett, Lorenzo Stoakes,
	David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng


On 03/06/25 7:01 am, Barry Song wrote:
> From: Barry Song <v-songbaohua@oppo.com>
>
> We've already found the VMA before calling madvise_free_single_vma(),
> so calling walk_page_range() and doing find_vma() again seems
> unnecessary. It also prevents potential optimizations for MADV_FREE
> to use a per-VMA lock.
>
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Jann Horn <jannh@google.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Lokesh Gidra <lokeshgidra@google.com>
> Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> Signed-off-by: Barry Song <v-songbaohua@oppo.com>
> ---
>   mm/madvise.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/madvise.c b/mm/madvise.c
> index d408ffa404b3..c6a28a2d3ff8 100644
> --- a/mm/madvise.c
> +++ b/mm/madvise.c
> @@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
>   
>   	mmu_notifier_invalidate_range_start(&range);
>   	tlb_start_vma(tlb, vma);
> -	walk_page_range(vma->vm_mm, range.start, range.end,
> +	walk_page_range_vma(vma, range.start, range.end,
>   			&madvise_free_walk_ops, tlb);
>   	tlb_end_vma(tlb, vma);
>   	mmu_notifier_invalidate_range_end(&range);

Can similar optimizations be made in madvise_willneed(), madvise_cold_page_range(), etc?



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  1:31 [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma() Barry Song
  2025-06-03  6:04 ` Anshuman Khandual
  2025-06-03  6:11 ` Dev Jain
@ 2025-06-03  7:44 ` David Hildenbrand
  2025-06-03  8:16 ` Oscar Salvador
  2025-06-03  9:40 ` Lorenzo Stoakes
  4 siblings, 0 replies; 9+ messages in thread
From: David Hildenbrand @ 2025-06-03  7:44 UTC (permalink / raw)
  To: Barry Song, akpm, linux-mm
  Cc: linux-kernel, Barry Song, Liam R. Howlett, Lorenzo Stoakes,
	Vlastimil Babka, Jann Horn, Suren Baghdasaryan, Lokesh Gidra,
	Tangquan Zheng

On 03.06.25 03:31, Barry Song wrote:
> From: Barry Song <v-songbaohua@oppo.com>
> 
> We've already found the VMA before calling madvise_free_single_vma(),
> so calling walk_page_range() and doing find_vma() again seems
> unnecessary. It also prevents potential optimizations for MADV_FREE
> to use a per-VMA lock.
> 
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Jann Horn <jannh@google.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Lokesh Gidra <lokeshgidra@google.com>
> Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> Signed-off-by: Barry Song <v-songbaohua@oppo.com>
> ---

Acked-by: David Hildenbrand <david@redhat.com>

-- 
Cheers,

David / dhildenb



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  1:31 [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma() Barry Song
                   ` (2 preceding siblings ...)
  2025-06-03  7:44 ` David Hildenbrand
@ 2025-06-03  8:16 ` Oscar Salvador
  2025-06-03  9:40 ` Lorenzo Stoakes
  4 siblings, 0 replies; 9+ messages in thread
From: Oscar Salvador @ 2025-06-03  8:16 UTC (permalink / raw)
  To: Barry Song
  Cc: akpm, linux-mm, linux-kernel, Barry Song, Liam R. Howlett,
	Lorenzo Stoakes, David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng

On Tue, Jun 03, 2025 at 01:31:54PM +1200, Barry Song wrote:
> From: Barry Song <v-songbaohua@oppo.com>
> 
> We've already found the VMA before calling madvise_free_single_vma(),
> so calling walk_page_range() and doing find_vma() again seems
> unnecessary. It also prevents potential optimizations for MADV_FREE
> to use a per-VMA lock.
> 
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Jann Horn <jannh@google.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Lokesh Gidra <lokeshgidra@google.com>
> Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> Signed-off-by: Barry Song <v-songbaohua@oppo.com>

Reviewed-by: Oscar Salvador <osalvador@suse.de>


-- 
Oscar Salvador
SUSE Labs


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  6:11 ` Dev Jain
@ 2025-06-03  8:47   ` Barry Song
  2025-06-03  9:41     ` Lorenzo Stoakes
  0 siblings, 1 reply; 9+ messages in thread
From: Barry Song @ 2025-06-03  8:47 UTC (permalink / raw)
  To: Dev Jain
  Cc: akpm, linux-mm, linux-kernel, Barry Song, Liam R. Howlett,
	Lorenzo Stoakes, David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng

On Tue, Jun 3, 2025 at 6:11 PM Dev Jain <dev.jain@arm.com> wrote:
>
>
> On 03/06/25 7:01 am, Barry Song wrote:
> > From: Barry Song <v-songbaohua@oppo.com>
> >
> > We've already found the VMA before calling madvise_free_single_vma(),
> > so calling walk_page_range() and doing find_vma() again seems
> > unnecessary. It also prevents potential optimizations for MADV_FREE
> > to use a per-VMA lock.
> >
> > Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> > Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > Cc: David Hildenbrand <david@redhat.com>
> > Cc: Vlastimil Babka <vbabka@suse.cz>
> > Cc: Jann Horn <jannh@google.com>
> > Cc: Suren Baghdasaryan <surenb@google.com>
> > Cc: Lokesh Gidra <lokeshgidra@google.com>
> > Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> > Signed-off-by: Barry Song <v-songbaohua@oppo.com>
> > ---
> >   mm/madvise.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/mm/madvise.c b/mm/madvise.c
> > index d408ffa404b3..c6a28a2d3ff8 100644
> > --- a/mm/madvise.c
> > +++ b/mm/madvise.c
> > @@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
> >
> >       mmu_notifier_invalidate_range_start(&range);
> >       tlb_start_vma(tlb, vma);
> > -     walk_page_range(vma->vm_mm, range.start, range.end,
> > +     walk_page_range_vma(vma, range.start, range.end,
> >                       &madvise_free_walk_ops, tlb);
> >       tlb_end_vma(tlb, vma);
> >       mmu_notifier_invalidate_range_end(&range);
>
> Can similar optimizations be made in madvise_willneed(), madvise_cold_page_range(), etc?

Yes, I think the same code flow applies to madvise_willneed,
madvise_cold_page_range, and similar functions, though my current
interest is more on madvise_free.

Let me prepare a v2 that includes those as well.

>

Thanks
Barry


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  1:31 [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma() Barry Song
                   ` (3 preceding siblings ...)
  2025-06-03  8:16 ` Oscar Salvador
@ 2025-06-03  9:40 ` Lorenzo Stoakes
  4 siblings, 0 replies; 9+ messages in thread
From: Lorenzo Stoakes @ 2025-06-03  9:40 UTC (permalink / raw)
  To: Barry Song
  Cc: akpm, linux-mm, linux-kernel, Barry Song, Liam R. Howlett,
	David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng

On Tue, Jun 03, 2025 at 01:31:54PM +1200, Barry Song wrote:
> From: Barry Song <v-songbaohua@oppo.com>
>
> We've already found the VMA before calling madvise_free_single_vma(),
> so calling walk_page_range() and doing find_vma() again seems
> unnecessary. It also prevents potential optimizations for MADV_FREE
> to use a per-VMA lock.

Really nice find, great work Barry!

Lord above, why on earth weren't we doing this before...

>
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Jann Horn <jannh@google.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Lokesh Gidra <lokeshgidra@google.com>
> Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> Signed-off-by: Barry Song <v-songbaohua@oppo.com>

I can't see anything wrong with this, so:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>

> ---
>  mm/madvise.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/madvise.c b/mm/madvise.c
> index d408ffa404b3..c6a28a2d3ff8 100644
> --- a/mm/madvise.c
> +++ b/mm/madvise.c
> @@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
>
>  	mmu_notifier_invalidate_range_start(&range);
>  	tlb_start_vma(tlb, vma);
> -	walk_page_range(vma->vm_mm, range.start, range.end,
> +	walk_page_range_vma(vma, range.start, range.end,
>  			&madvise_free_walk_ops, tlb);
>  	tlb_end_vma(tlb, vma);
>  	mmu_notifier_invalidate_range_end(&range);
> --
> 2.39.3 (Apple Git-146)
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  8:47   ` Barry Song
@ 2025-06-03  9:41     ` Lorenzo Stoakes
  2025-06-03 12:15       ` David Hildenbrand
  0 siblings, 1 reply; 9+ messages in thread
From: Lorenzo Stoakes @ 2025-06-03  9:41 UTC (permalink / raw)
  To: Barry Song
  Cc: Dev Jain, akpm, linux-mm, linux-kernel, Barry Song,
	Liam R. Howlett, David Hildenbrand, Vlastimil Babka, Jann Horn,
	Suren Baghdasaryan, Lokesh Gidra, Tangquan Zheng

On Tue, Jun 03, 2025 at 08:47:04PM +1200, Barry Song wrote:
> On Tue, Jun 3, 2025 at 6:11 PM Dev Jain <dev.jain@arm.com> wrote:
> >
> >
> > On 03/06/25 7:01 am, Barry Song wrote:
> > > From: Barry Song <v-songbaohua@oppo.com>
> > >
> > > We've already found the VMA before calling madvise_free_single_vma(),
> > > so calling walk_page_range() and doing find_vma() again seems
> > > unnecessary. It also prevents potential optimizations for MADV_FREE
> > > to use a per-VMA lock.
> > >
> > > Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> > > Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > > Cc: David Hildenbrand <david@redhat.com>
> > > Cc: Vlastimil Babka <vbabka@suse.cz>
> > > Cc: Jann Horn <jannh@google.com>
> > > Cc: Suren Baghdasaryan <surenb@google.com>
> > > Cc: Lokesh Gidra <lokeshgidra@google.com>
> > > Cc: Tangquan Zheng <zhengtangquan@oppo.com>
> > > Signed-off-by: Barry Song <v-songbaohua@oppo.com>
> > > ---
> > >   mm/madvise.c | 2 +-
> > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/mm/madvise.c b/mm/madvise.c
> > > index d408ffa404b3..c6a28a2d3ff8 100644
> > > --- a/mm/madvise.c
> > > +++ b/mm/madvise.c
> > > @@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
> > >
> > >       mmu_notifier_invalidate_range_start(&range);
> > >       tlb_start_vma(tlb, vma);
> > > -     walk_page_range(vma->vm_mm, range.start, range.end,
> > > +     walk_page_range_vma(vma, range.start, range.end,
> > >                       &madvise_free_walk_ops, tlb);
> > >       tlb_end_vma(tlb, vma);
> > >       mmu_notifier_invalidate_range_end(&range);
> >
> > Can similar optimizations be made in madvise_willneed(), madvise_cold_page_range(), etc?
>
> Yes, I think the same code flow applies to madvise_willneed,
> madvise_cold_page_range, and similar functions, though my current
> interest is more on madvise_free.
>
> Let me prepare a v2 that includes those as well.

FWIW Dev makes a great point here and I agree wholeheartedly, let's fix all such
cases...

As an aside, I wonder if we previously didn't do this because we hadn't
previously exposed the walk_page_range_vma() API or something?

>
> >
>
> Thanks
> Barry

Cheers!


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma()
  2025-06-03  9:41     ` Lorenzo Stoakes
@ 2025-06-03 12:15       ` David Hildenbrand
  0 siblings, 0 replies; 9+ messages in thread
From: David Hildenbrand @ 2025-06-03 12:15 UTC (permalink / raw)
  To: Lorenzo Stoakes, Barry Song
  Cc: Dev Jain, akpm, linux-mm, linux-kernel, Barry Song,
	Liam R. Howlett, Vlastimil Babka, Jann Horn, Suren Baghdasaryan,
	Lokesh Gidra, Tangquan Zheng

On 03.06.25 11:41, Lorenzo Stoakes wrote:
> On Tue, Jun 03, 2025 at 08:47:04PM +1200, Barry Song wrote:
>> On Tue, Jun 3, 2025 at 6:11 PM Dev Jain <dev.jain@arm.com> wrote:
>>>
>>>
>>> On 03/06/25 7:01 am, Barry Song wrote:
>>>> From: Barry Song <v-songbaohua@oppo.com>
>>>>
>>>> We've already found the VMA before calling madvise_free_single_vma(),
>>>> so calling walk_page_range() and doing find_vma() again seems
>>>> unnecessary. It also prevents potential optimizations for MADV_FREE
>>>> to use a per-VMA lock.
>>>>
>>>> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
>>>> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
>>>> Cc: David Hildenbrand <david@redhat.com>
>>>> Cc: Vlastimil Babka <vbabka@suse.cz>
>>>> Cc: Jann Horn <jannh@google.com>
>>>> Cc: Suren Baghdasaryan <surenb@google.com>
>>>> Cc: Lokesh Gidra <lokeshgidra@google.com>
>>>> Cc: Tangquan Zheng <zhengtangquan@oppo.com>
>>>> Signed-off-by: Barry Song <v-songbaohua@oppo.com>
>>>> ---
>>>>    mm/madvise.c | 2 +-
>>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/mm/madvise.c b/mm/madvise.c
>>>> index d408ffa404b3..c6a28a2d3ff8 100644
>>>> --- a/mm/madvise.c
>>>> +++ b/mm/madvise.c
>>>> @@ -826,7 +826,7 @@ static int madvise_free_single_vma(struct madvise_behavior *madv_behavior,
>>>>
>>>>        mmu_notifier_invalidate_range_start(&range);
>>>>        tlb_start_vma(tlb, vma);
>>>> -     walk_page_range(vma->vm_mm, range.start, range.end,
>>>> +     walk_page_range_vma(vma, range.start, range.end,
>>>>                        &madvise_free_walk_ops, tlb);
>>>>        tlb_end_vma(tlb, vma);
>>>>        mmu_notifier_invalidate_range_end(&range);
>>>
>>> Can similar optimizations be made in madvise_willneed(), madvise_cold_page_range(), etc?
>>
>> Yes, I think the same code flow applies to madvise_willneed,
>> madvise_cold_page_range, and similar functions, though my current
>> interest is more on madvise_free.
>>
>> Let me prepare a v2 that includes those as well.
> 
> FWIW Dev makes a great point here and I agree wholeheartedly, let's fix all such
> cases...
> 
> As an aside, I wonder if we previously didn't do this because we hadn't
> previously exposed the walk_page_range_vma() API or something?

IIRC, yes:

commit e07cda5f232fac4de0925d8a4c92e51e41fa2f6e
Author: David Hildenbrand <david@redhat.com>
Date:   Fri Oct 21 12:11:39 2022 +0200

     mm/pagewalk: add walk_page_range_vma()
     
     Let's add walk_page_range_vma(), which is similar to walk_page_vma(),
     however, is only interested in a subset of the VMA range.
     
     To be used in KSM code to stop using follow_page() next.


-- 
Cheers,

David / dhildenb



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-06-03 12:15 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-06-03  1:31 [PATCH RFC] mm: madvise: use walk_page_range_vma() for madvise_free_single_vma() Barry Song
2025-06-03  6:04 ` Anshuman Khandual
2025-06-03  6:11 ` Dev Jain
2025-06-03  8:47   ` Barry Song
2025-06-03  9:41     ` Lorenzo Stoakes
2025-06-03 12:15       ` David Hildenbrand
2025-06-03  7:44 ` David Hildenbrand
2025-06-03  8:16 ` Oscar Salvador
2025-06-03  9:40 ` Lorenzo Stoakes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox