Linux kernel -stable discussions
 help / color / mirror / Atom feed
* [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd()
       [not found] <20260728194714.3713735-1-gourry@gourry.net>
@ 2026-07-28 19:47 ` Gregory Price
  2026-08-06 13:20   ` David Hildenbrand (Arm)
  2026-08-06 13:59   ` Lorenzo Stoakes (ARM)
  0 siblings, 2 replies; 4+ messages in thread
From: Gregory Price @ 2026-07-28 19:47 UTC (permalink / raw)
  To: linux-mm
  Cc: damon, linux-kernel, kernel-team, sj, akpm, david, ljs, ziy,
	baolin.wang, liam, npache, ryan.roberts, dev.jain, baohua,
	lance.yang, usama.arif, vbabka, jannh, matthew.brost,
	joshua.hahnjy, rakie.kim, byungchul, gourry, ying.huang, apopple,
	stable

madvise_free_huge_pmd() resolves the folio backing a PMD via pmd_folio()
and marks it lazyfree without checking for zone device memory.

The surrounding guards do not cover every zone device case:
 - MADV_FREE only operates on anonymous VMAs (DAX mappings are excluded)

 - !pmd_present() branch rejects device-private and migration entries

 - present zone device PMD (device coherent THP) is not filtered.
   Unlike vm_normal_page_pmd(), it performs no special/pfnmap check,
   and would be marked lazyfree here.

Bail out when the folio is a zone device folio.

Fixes: 368076f52ebe ("mm/huge_memory: add device-private THP support to PMD operations")
Cc: <stable@vger.kernel.org>
Signed-off-by: Gregory Price (Meta) <gourry@gourry.net>
---
 mm/huge_memory.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 5bd8d4f59a7b..e0ffdeeb3077 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -2338,6 +2338,10 @@ bool madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
 	}
 
 	folio = pmd_folio(orig_pmd);
+
+	if (folio_is_zone_device(folio))
+		goto out;
+
 	/*
 	 * If other processes are mapping this folio, we couldn't discard
 	 * the folio unless they all do MADV_FREE so let's skip the folio.
-- 
2.55.0


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

* Re: [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd()
  2026-07-28 19:47 ` [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd() Gregory Price
@ 2026-08-06 13:20   ` David Hildenbrand (Arm)
  2026-08-06 13:59   ` Lorenzo Stoakes (ARM)
  1 sibling, 0 replies; 4+ messages in thread
From: David Hildenbrand (Arm) @ 2026-08-06 13:20 UTC (permalink / raw)
  To: Gregory Price, linux-mm
  Cc: damon, linux-kernel, kernel-team, sj, akpm, ljs, ziy, baolin.wang,
	liam, npache, ryan.roberts, dev.jain, baohua, lance.yang,
	usama.arif, vbabka, jannh, matthew.brost, joshua.hahnjy,
	rakie.kim, byungchul, ying.huang, apopple, stable

On 7/28/26 21:47, Gregory Price wrote:
> madvise_free_huge_pmd() resolves the folio backing a PMD via pmd_folio()
> and marks it lazyfree without checking for zone device memory.
> 
> The surrounding guards do not cover every zone device case:
>  - MADV_FREE only operates on anonymous VMAs (DAX mappings are excluded)
> 
>  - !pmd_present() branch rejects device-private and migration entries
> 
>  - present zone device PMD (device coherent THP) is not filtered.
>    Unlike vm_normal_page_pmd(), it performs no special/pfnmap check,
>    and would be marked lazyfree here.
> 
> Bail out when the folio is a zone device folio.
> 
> Fixes: 368076f52ebe ("mm/huge_memory: add device-private THP support to PMD operations")
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Gregory Price (Meta) <gourry@gourry.net>
> ---

Acked-by: David Hildenbrand (Arm) <david@kernel.org>

-- 
Cheers,

David

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

* Re: [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd()
  2026-07-28 19:47 ` [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd() Gregory Price
  2026-08-06 13:20   ` David Hildenbrand (Arm)
@ 2026-08-06 13:59   ` Lorenzo Stoakes (ARM)
  2026-08-06 17:03     ` Gregory Price
  1 sibling, 1 reply; 4+ messages in thread
From: Lorenzo Stoakes (ARM) @ 2026-08-06 13:59 UTC (permalink / raw)
  To: Gregory Price
  Cc: linux-mm, damon, linux-kernel, kernel-team, sj, akpm, david, ziy,
	baolin.wang, liam, npache, ryan.roberts, dev.jain, baohua,
	lance.yang, usama.arif, vbabka, jannh, matthew.brost,
	joshua.hahnjy, rakie.kim, byungchul, ying.huang, apopple, stable

I kinda wish he had some generalised folio handler like:

	struct folio_ops {
		int (*handle_empty_entry)(void *priv);
		int (*handle_normal_folio)(void *priv, struct folio *folio);
		int (*handle_softleaf_pte_entry)(void *priv, const pte_t *ptep);
		int (*handle_zone_folio)(void *priv, struct folio *folio);
		...
	};

Or I don't know an equivalent type of thing, as we keep having these same
patterns emerge in mm that are duplicated in a million places with slight
variations... :)

I wonder if C is expressive enough to get us to something sane though.

On Tue, Jul 28, 2026 at 03:47:12PM -0400, Gregory Price wrote:
> madvise_free_huge_pmd() resolves the folio backing a PMD via pmd_folio()
> and marks it lazyfree without checking for zone device memory.
>
> The surrounding guards do not cover every zone device case:
>  - MADV_FREE only operates on anonymous VMAs (DAX mappings are excluded)
>
>  - !pmd_present() branch rejects device-private and migration entries
>
>  - present zone device PMD (device coherent THP) is not filtered.
>    Unlike vm_normal_page_pmd(), it performs no special/pfnmap check,
>    and would be marked lazyfree here.
>
> Bail out when the folio is a zone device folio.
>
> Fixes: 368076f52ebe ("mm/huge_memory: add device-private THP support to PMD operations")
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Gregory Price (Meta) <gourry@gourry.net>

Anyway LGTM so:

Reviewed-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>

> ---
>  mm/huge_memory.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 5bd8d4f59a7b..e0ffdeeb3077 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -2338,6 +2338,10 @@ bool madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
>  	}
>
>  	folio = pmd_folio(orig_pmd);
> +
> +	if (folio_is_zone_device(folio))
> +		goto out;
> +
>  	/*
>  	 * If other processes are mapping this folio, we couldn't discard
>  	 * the folio unless they all do MADV_FREE so let's skip the folio.
> --
> 2.55.0
>

--
Cheers, Lorenzo

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

* Re: [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd()
  2026-08-06 13:59   ` Lorenzo Stoakes (ARM)
@ 2026-08-06 17:03     ` Gregory Price
  0 siblings, 0 replies; 4+ messages in thread
From: Gregory Price @ 2026-08-06 17:03 UTC (permalink / raw)
  To: Lorenzo Stoakes (ARM)
  Cc: linux-mm, damon, linux-kernel, kernel-team, sj, akpm, david, ziy,
	baolin.wang, liam, npache, ryan.roberts, dev.jain, baohua,
	lance.yang, usama.arif, vbabka, jannh, matthew.brost,
	joshua.hahnjy, rakie.kim, byungchul, ying.huang, apopple, stable

On Thu, Aug 06, 2026 at 02:59:22PM +0100, Lorenzo Stoakes (ARM) wrote:
> I kinda wish he had some generalised folio handler like:
> 
> 	struct folio_ops {
> 		int (*handle_empty_entry)(void *priv);
> 		int (*handle_normal_folio)(void *priv, struct folio *folio);
> 		int (*handle_softleaf_pte_entry)(void *priv, const pte_t *ptep);
> 		int (*handle_zone_folio)(void *priv, struct folio *folio);
> 		...
> 	};
> 
> Or I don't know an equivalent type of thing, as we keep having these same
> patterns emerge in mm that are duplicated in a million places with slight
> variations... :)
> 
> I wonder if C is expressive enough to get us to something sane though.
> 

This is functionally folio->pgmap except it's not generalized and it
causes us pain :[

I briefly took a forray into moving pgmap to be node-scope, and that
works decently, but first i'm just trying to clena up what i can for
zone device.

Anyway, i get what you're getting at here, and that would be nice.

> > Fixes: 368076f52ebe ("mm/huge_memory: add device-private THP support to PMD operations")
> > Cc: <stable@vger.kernel.org>
> > Signed-off-by: Gregory Price (Meta) <gourry@gourry.net>
> 
> Anyway LGTM so:
> 
> Reviewed-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
>

many thanks :]

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

end of thread, other threads:[~2026-08-06 17:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20260728194714.3713735-1-gourry@gourry.net>
2026-07-28 19:47 ` [PATCH 2/4] mm/huge_memory: skip zone device folios in madvise_free_huge_pmd() Gregory Price
2026-08-06 13:20   ` David Hildenbrand (Arm)
2026-08-06 13:59   ` Lorenzo Stoakes (ARM)
2026-08-06 17:03     ` Gregory Price

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