[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250724084441.380404-3-link@vivo.com>
Date: Thu, 24 Jul 2025 16:44:30 +0800
From: Huan Yang <link@...o.com>
To: Andrew Morton <akpm@...ux-foundation.org>,
David Hildenbrand <david@...hat.com>,
Lorenzo Stoakes <lorenzo.stoakes@...cle.com>,
Rik van Riel <riel@...riel.com>,
"Liam R. Howlett" <Liam.Howlett@...cle.com>,
Vlastimil Babka <vbabka@...e.cz>,
Harry Yoo <harry.yoo@...cle.com>,
Xu Xin <xu.xin16@....com.cn>,
Chengming Zhou <chengming.zhou@...ux.dev>,
Mike Rapoport <rppt@...nel.org>,
Suren Baghdasaryan <surenb@...gle.com>,
Michal Hocko <mhocko@...e.com>,
Zi Yan <ziy@...dia.com>,
Matthew Brost <matthew.brost@...el.com>,
Joshua Hahn <joshua.hahnjy@...il.com>,
Rakie Kim <rakie.kim@...com>,
Byungchul Park <byungchul@...com>,
Gregory Price <gourry@...rry.net>,
Ying Huang <ying.huang@...ux.alibaba.com>,
Alistair Popple <apopple@...dia.com>,
"Matthew Wilcox (Oracle)" <willy@...radead.org>,
Huan Yang <link@...o.com>,
Christian Brauner <brauner@...nel.org>,
Usama Arif <usamaarif642@...il.com>,
Yu Zhao <yuzhao@...gle.com>,
Baolin Wang <baolin.wang@...ux.alibaba.com>,
linux-mm@...ck.org,
linux-kernel@...r.kernel.org,
"Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>
Subject: [RFC PATCH 2/9] mm: add page_type value helper
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@...o.com>
---
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
Powered by blists - more mailing lists