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
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
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
© 2016 - 2025 Red Hat, Inc.