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 5/8] mm/internal: add set_softleaf_ptes
Date: Thu, 23 Jul 2026 07:09:01 +0000 [thread overview]
Message-ID: <20260723070905.3422276-6-dev.jain@arm.com> (raw)
In-Reply-To: <20260723070905.3422276-1-dev.jain@arm.com>
Currently we have a helper called set_ptes() which is used to set
consecutive present ptes in the pgtables. To do the same operation but
to set "consecutive" nonpresent (softleaf) ptes, add set_softleaf_ptes().
The softleaves which have a notion of consecutivity is swap softleaf,
and those grouped by softeaf_has_pfn(). The latter is trivial; future
code can convert present ptes pointing to the same large folio to
swap softleaves with consecutive offsets using this helper.
The other case is softleaf markers. They do not have a notion of a swap
offset or PFN, so future code can use set_softleaf_ptes() to store
multiple (same) markers on the ptes.
Signed-off-by: Dev Jain <dev.jain@arm.com>
---
mm/internal.h | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/mm/internal.h b/mm/internal.h
index ce52188a8a65d..3fc1c1c776ca3 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -514,6 +514,39 @@ static inline pte_t pte_next_softleaf_offset(pte_t pte)
return pte_move_softleaf_offset(pte, 1);
}
+/**
+ * set_softleaf_ptes - Set consecutive softleaf PTEs.
+ * @mm: Address space the PTEs belong to.
+ * @addr: Address of the first PTE.
+ * @ptep: Page table pointer for the first PTE.
+ * @pte: PTE to set for the first entry.
+ * @nr: Number of PTEs to set.
+ *
+ * Install @nr softleaf PTEs, advancing @pte when its softleaf entry
+ * represents consecutive offsets. Swap entries advance through swap offsets,
+ * PFN softleaf entries advance through PFNs (encoded by swap offset), and
+ * marker entries are repeated unchanged.
+ */
+static inline void set_softleaf_ptes(struct mm_struct *mm, unsigned long addr,
+ pte_t *ptep, pte_t pte, unsigned long nr)
+{
+ softleaf_t entry;
+ bool advance;
+
+ entry = softleaf_from_pte(pte);
+ advance = softleaf_is_swap(entry) || softleaf_has_pfn(entry);
+
+ for (;;) {
+ set_pte_at(mm, addr, ptep, pte);
+ if (--nr == 0)
+ break;
+ if (advance)
+ pte = pte_next_softleaf_offset(pte);
+ ptep++;
+ addr += PAGE_SIZE;
+ }
+}
+
/**
* swap_pte_batch - detect a PTE batch for a set of contiguous swap entries
* @start_ptep: Page table pointer for the first entry.
--
2.43.0
next prev parent reply other threads:[~2026-07-23 7:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 7:08 [PATCH 0/8] Optimize anonymous swapbacked large folio unmapping Dev Jain
2026-07-23 7:08 ` [PATCH 1/8] mm/swapfile: add batched version of folio_dup_swap Dev Jain
2026-07-23 7:08 ` [PATCH 2/8] mm/swapfile: add batched version of folio_put_swap Dev Jain
2026-07-23 7:08 ` [PATCH 3/8] mm/rmap: mm/rmap: Add batched version of folio_try_share_anon_rmap_pte Dev Jain
2026-07-23 7:09 ` [PATCH 4/8] mm/internal: rename swap offset helpers to softleaf offset Dev Jain
2026-07-23 7:09 ` Dev Jain [this message]
2026-07-23 7:09 ` [PATCH 6/8] mm/memory: use set_softleaf_ptes for uffd-wp markers Dev Jain
2026-07-23 7:09 ` [PATCH 7/8] mm: move anon-exclusive batch helper to internal.h Dev Jain
2026-07-23 7:09 ` [PATCH 8/8] mm/rmap: batch unmap anonymous swap-backed large folios Dev Jain
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=20260723070905.3422276-6-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox