[PATCH mm-new v2 1/2] mm: make is_guard_pte_marker() available for hugepage collapse

Lance Yang posted 2 patches 2 weeks ago
[PATCH mm-new v2 1/2] mm: make is_guard_pte_marker() available for hugepage collapse
Posted by Lance Yang 2 weeks ago
From: Lance Yang <lance.yang@linux.dev>

The hugepage collapsing code needs is_guard_pte_marker() to correctly
handle PTE guard markers. Move the helper to a shared header and expose
it.

While at it, simplify the implementation. The current code is redundant
as it effectively expands to:

  is_swap_pte(pte) &&
  is_pte_marker_entry(...) && // from is_pte_marker()
  is_pte_marker_entry(...)    // from is_guard_swp_entry()

While a modern compiler could likely optimize this away, let's have clean
code and not rely on it.

Cc: Kairui Song <kasong@tencent.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Signed-off-by: Lance Yang <lance.yang@linux.dev>
---
 include/linux/swapops.h | 6 ++++++
 mm/madvise.c            | 6 ------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/include/linux/swapops.h b/include/linux/swapops.h
index 64ea151a7ae3..7475324c7757 100644
--- a/include/linux/swapops.h
+++ b/include/linux/swapops.h
@@ -469,6 +469,12 @@ static inline int is_guard_swp_entry(swp_entry_t entry)
 		(pte_marker_get(entry) & PTE_MARKER_GUARD);
 }
 
+static inline bool is_guard_pte_marker(pte_t ptent)
+{
+	return is_swap_pte(ptent) &&
+	       is_guard_swp_entry(pte_to_swp_entry(ptent));
+}
+
 /*
  * This is a special version to check pte_none() just to cover the case when
  * the pte is a pte marker.  It existed because in many cases the pte marker
diff --git a/mm/madvise.c b/mm/madvise.c
index 35ed4ab0d7c5..bd46e6788fac 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -1069,12 +1069,6 @@ static bool is_valid_guard_vma(struct vm_area_struct *vma, bool allow_locked)
 	return !(vma->vm_flags & disallowed);
 }
 
-static bool is_guard_pte_marker(pte_t ptent)
-{
-	return is_pte_marker(ptent) &&
-		is_guard_swp_entry(pte_to_swp_entry(ptent));
-}
-
 static int guard_install_pud_entry(pud_t *pud, unsigned long addr,
 				   unsigned long next, struct mm_walk *walk)
 {
-- 
2.49.0
Re: [PATCH mm-new v2 1/2] mm: make is_guard_pte_marker() available for hugepage collapse
Posted by Wei Yang 1 week, 2 days ago
On Thu, Sep 18, 2025 at 01:04:30PM +0800, Lance Yang wrote:
>From: Lance Yang <lance.yang@linux.dev>
>
>The hugepage collapsing code needs is_guard_pte_marker() to correctly
>handle PTE guard markers. Move the helper to a shared header and expose
>it.
>
>While at it, simplify the implementation. The current code is redundant
>as it effectively expands to:
>
>  is_swap_pte(pte) &&
>  is_pte_marker_entry(...) && // from is_pte_marker()
>  is_pte_marker_entry(...)    // from is_guard_swp_entry()
>
>While a modern compiler could likely optimize this away, let's have clean
>code and not rely on it.
>
>Cc: Kairui Song <kasong@tencent.com>
>Acked-by: David Hildenbrand <david@redhat.com>
>Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
>Signed-off-by: Lance Yang <lance.yang@linux.dev>

Reviewed-by: Wei Yang <richard.weiyang@gmail.com>

-- 
Wei Yang
Help you, Help me
Re: [PATCH mm-new v2 1/2] mm: make is_guard_pte_marker() available for hugepage collapse
Posted by Zi Yan 1 week, 6 days ago
On 18 Sep 2025, at 1:04, Lance Yang wrote:

> From: Lance Yang <lance.yang@linux.dev>
>
> The hugepage collapsing code needs is_guard_pte_marker() to correctly
> handle PTE guard markers. Move the helper to a shared header and expose
> it.
>
> While at it, simplify the implementation. The current code is redundant
> as it effectively expands to:
>
>   is_swap_pte(pte) &&
>   is_pte_marker_entry(...) && // from is_pte_marker()
>   is_pte_marker_entry(...)    // from is_guard_swp_entry()
>
> While a modern compiler could likely optimize this away, let's have clean
> code and not rely on it.
>
> Cc: Kairui Song <kasong@tencent.com>
> Acked-by: David Hildenbrand <david@redhat.com>
> Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Signed-off-by: Lance Yang <lance.yang@linux.dev>
> ---
>  include/linux/swapops.h | 6 ++++++
>  mm/madvise.c            | 6 ------
>  2 files changed, 6 insertions(+), 6 deletions(-)
>
LGTM. Reviewed-by: Zi Yan <ziy@nvidia.com>

Best Regards,
Yan, Zi