All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dev Jain <dev.jain@arm.com>
To: akpm@linux-foundation.org, david@kernel.org, ljs@kernel.org,
	hughd@google.com, chrisl@kernel.org, kasong@tencent.com
Cc: Dev Jain <dev.jain@arm.com>,
	riel@surriel.com, liam@infradead.org, vbabka@kernel.org,
	harry@kernel.org, jannh@google.com, lance.yang@linux.dev,
	baolin.wang@linux.alibaba.com, shikemeng@huaweicloud.com,
	nphamcs@gmail.com, baoquan.he@linux.dev, baohua@kernel.org,
	youngjun.park@lge.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, rppt@kernel.org, surenb@google.com,
	mhocko@suse.com, pfalcato@suse.de, ryan.roberts@arm.com,
	anshuman.khandual@arm.com
Subject: [PATCH v2 3/8] mm: move anon-exclusive batch helper to mm.h
Date: Tue,  1 Sep 2026 05:43:50 +0000	[thread overview]
Message-ID: <20260901054358.4049095-4-dev.jain@arm.com> (raw)
In-Reply-To: <20260901054358.4049095-1-dev.jain@arm.com>

In preparation for optimizing large folio unmapping, we need to reuse
the page_anon_exclusive_batch helper in rmap.c and rmap.h and obey the
existing use in mprotect.c .

Therefore, move it from mprotect.c to mm.h. Gate with CONFIG_MMU since
both rmap and mprotect users are built only for CONFIG_MMU.

While at it, change start_idx and max_len to unsigned long type for
future proofing against THP support at >= PUD level. Also shorten
expected_anon_exclusive -> anon_exclusive.

Signed-off-by: Dev Jain <dev.jain@arm.com>
---
 include/linux/mm.h | 19 +++++++++++++++++++
 mm/mprotect.c      | 17 -----------------
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index dd09c438fa23e..63da8813bc5df 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -244,6 +244,25 @@ static inline unsigned long folio_page_idx(const struct folio *folio,
 	return page - &folio->page;
 }
 
+#ifdef CONFIG_MMU
+/*
+ * Get max length of consecutive PTEs pointing to PageAnonExclusive() pages or
+ * !PageAnonExclusive() pages, starting from start_idx. Caller must enforce
+ * that the PTEs point to consecutive pages of the same anon large folio.
+ */
+static __always_inline int page_anon_exclusive_batch(unsigned long start_idx,
+		unsigned long max_len, struct page *first_page, bool anon_exclusive)
+{
+	int idx;
+
+	for (idx = start_idx + 1; idx < start_idx + max_len; ++idx) {
+		if (anon_exclusive != PageAnonExclusive(first_page + idx))
+			break;
+	}
+	return idx - start_idx;
+}
+#endif
+
 static inline struct folio *lru_to_folio(struct list_head *head)
 {
 	return list_entry((head)->prev, struct folio, lru);
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 2888ee638d872..75c2b1a00eb36 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -138,23 +138,6 @@ static __always_inline void prot_commit_flush_ptes(struct vm_area_struct *vma,
 		tlb_flush_pte_range(tlb, addr, nr_ptes * PAGE_SIZE);
 }
 
-/*
- * Get max length of consecutive ptes pointing to PageAnonExclusive() pages or
- * !PageAnonExclusive() pages, starting from start_idx. Caller must enforce
- * that the ptes point to consecutive pages of the same anon large folio.
- */
-static __always_inline int page_anon_exclusive_batch(int start_idx, int max_len,
-		struct page *first_page, bool expected_anon_exclusive)
-{
-	int idx;
-
-	for (idx = start_idx + 1; idx < start_idx + max_len; ++idx) {
-		if (expected_anon_exclusive != PageAnonExclusive(first_page + idx))
-			break;
-	}
-	return idx - start_idx;
-}
-
 /*
  * This function is a result of trying our very best to retain the
  * "avoid the write-fault handler" optimization. In can_change_pte_writable(),
-- 
2.43.0



  parent reply	other threads:[~2026-09-01  5:44 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-01  5:43 [PATCH v2 0/8] Optimize anonymous swapbacked large folio unmapping Dev Jain
2026-09-01  5:43 ` [PATCH v2 1/8] mm/swapfile: add batched version of folio_dup_swap Dev Jain
2026-09-01  5:43 ` [PATCH v2 2/8] mm/swapfile: add batched version of folio_put_swap Dev Jain
2026-09-01  5:43 ` Dev Jain [this message]
2026-09-01  5:49   ` [PATCH v2 3/8] mm: move anon-exclusive batch helper to mm.h Barry Song
2026-09-01  6:24     ` Dev Jain
2026-09-02  6:29       ` Barry Song
2026-09-04  3:46   ` Dev Jain
2026-09-01  5:43 ` [PATCH v2 4/8] mm/rmap: Add batched version of folio_try_share_anon_rmap_pte Dev Jain
     [not found]   ` <CAGsJ_4zWPXoJ5kiLoVcq1YHv6WcmjPEssTUs4OT15iNRob3_rQ@mail.gmail.com>
2026-09-09  7:44     ` Dev Jain
2026-09-01  5:43 ` [PATCH v2 5/8] mm/internal: rename swap offset helpers to softleaf offset Dev Jain
2026-09-05 10:42   ` Barry Song
2026-09-05 10:49     ` Barry Song
2026-09-07  5:38     ` Dev Jain
2026-09-07 21:33       ` Barry Song
2026-09-08  5:38         ` Dev Jain
2026-09-08  8:41           ` Garg, Shivank
2026-09-01  5:43 ` [PATCH v2 6/8] mm/internal: add set_softleaf_ptes Dev Jain
2026-09-05 10:52   ` Barry Song
2026-09-01  5:43 ` [PATCH v2 7/8] mm/memory: use set_softleaf_ptes for uffd-wp markers Dev Jain
2026-09-05 10:53   ` Barry Song
2026-09-01  5:43 ` [PATCH v2 8/8] mm/rmap: batch unmap anonymous swap-backed large folios Dev Jain
2026-09-08 21:48   ` Barry Song
2026-09-10  4:39     ` Dev Jain
2026-09-10  4:58       ` Barry Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260901054358.4049095-4-dev.jain@arm.com \
    --to=dev.jain@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=baoquan.he@linux.dev \
    --cc=chrisl@kernel.org \
    --cc=david@kernel.org \
    --cc=harry@kernel.org \
    --cc=hughd@google.com \
    --cc=jannh@google.com \
    --cc=kasong@tencent.com \
    --cc=lance.yang@linux.dev \
    --cc=liam@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=mhocko@suse.com \
    --cc=nphamcs@gmail.com \
    --cc=pfalcato@suse.de \
    --cc=riel@surriel.com \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=shikemeng@huaweicloud.com \
    --cc=surenb@google.com \
    --cc=vbabka@kernel.org \
    --cc=youngjun.park@lge.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.