[RFC PATCH 2/9] mm: add page_type value helper
From: Huan Yang
Date: Thu Jul 24 2025 - 05:00:40 EST
Add two helper functions __SetPageXXXValue and __GetPageXXXValue to
assist in assigning values to the specified page_type. Since the current
page_type value is not supported on large folio, only the page version
of the helper functions is provided.
Signed-off-by: Huan Yang <link@xxxxxxxx>
---
include/linux/page-flags.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 3c7103c2eee4..52c9435079d5 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -1024,6 +1024,23 @@ static __always_inline void __ClearPage##uname(struct page *page) \
return; \
VM_BUG_ON_PAGE(!Page##uname(page), page); \
page->page_type = UINT_MAX; \
+} \
+static __always_inline void __PageSet##uname##Value(struct page *page, \
+ unsigned int value) \
+{ \
+ if (!Page##uname(page)) \
+ return; \
+ if (unlikely(value > (PAGE_TYPE_MASK))) \
+ return; \
+ WRITE_ONCE(page->page_type, (unsigned int)PGTY_##lname \
+ << PAGE_TYPE_SHIFT | value); \
+} \
+static __always_inline unsigned int __PageGet##uname##Value( \
+ struct page *page) \
+{ \
+ if (!Page##uname(page)) \
+ return 0; \
+ return READ_ONCE(page->page_type) & PAGE_TYPE_MASK; \
}
/*
--
2.34.1