[PATCH] tmp

From: David Hildenbrand (Arm)

Date: Fri Jun 19 2026 - 03:58:46 EST


Signed-off-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>
---
include/linux/page_ext.h | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h
index 61e876e255e8..468c074582e1 100644
--- a/include/linux/page_ext.h
+++ b/include/linux/page_ext.h
@@ -112,6 +112,7 @@ static inline struct page_ext *page_ext_next(struct page_ext *curr)

struct page_ext_iter {
unsigned long index;
+ unsigned long pgcount;
unsigned long start_pfn;
struct page_ext *page_ext;
};
@@ -120,15 +121,19 @@ struct page_ext_iter {
* page_ext_iter_begin() - Prepare for iterating through page extensions.
* @iter: page extension iterator.
* @pfn: PFN of the page we're interested in.
+ * @pgcount: number of page_ext entries to iterate
*
* Must be called with RCU read lock taken.
*
* Return: NULL if no page_ext exists for this page.
*/
static inline struct page_ext *page_ext_iter_begin(struct page_ext_iter *iter,
- unsigned long pfn)
+ unsigned long pfn, unsigned long pgcount)
{
+ VM_WARN_ON_ONCE(!pgcount);
+
iter->index = 0;
+ iter->pgcount = pgcount;
iter->start_pfn = pfn;
iter->page_ext = page_ext_lookup(pfn);

@@ -149,8 +154,9 @@ static inline struct page_ext *page_ext_iter_next(struct page_ext_iter *iter)

if (WARN_ON_ONCE(!iter->page_ext))
return NULL;
+ if (++iter->index >= iter->pgcount)
+ return NULL;

- iter->index++;
pfn = iter->start_pfn + iter->index;

if (page_ext_iter_next_fast_possible(pfn))
@@ -183,9 +189,9 @@ static inline struct page_ext *page_ext_iter_get(const struct page_ext_iter *ite
* IMPORTANT: must be called with RCU read lock taken.
*/
#define for_each_page_ext(__page, __pgcount, __page_ext, __iter) \
- for (__page_ext = page_ext_iter_begin(&__iter, page_to_pfn(__page));\
- __page_ext && __iter.index < __pgcount; \
- __page_ext = page_ext_iter_next(&__iter))
+ for (__page_ext = page_ext_iter_begin(&__iter, page_to_pfn(__page), __pgcount);\
+ __page_ext; \
+ __page_ext = page_ext_iter_next(&__iter))

#else /* !CONFIG_PAGE_EXTENSION */
struct page_ext;
--
2.43.0


--
Cheers,

David