From: Dev Jain <dev.jain@arm.com>
To: akpm@linux-foundation.org
Cc: ryan.roberts@arm.com, david@redhat.com, willy@infradead.org,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
catalin.marinas@arm.com, will@kernel.org,
Liam.Howlett@oracle.com, lorenzo.stoakes@oracle.com,
vbabka@suse.cz, jannh@google.com, anshuman.khandual@arm.com,
peterx@redhat.com, joey.gouly@arm.com, ioworker0@gmail.com,
baohua@kernel.org, kevin.brodsky@arm.com,
quic_zhenhuah@quicinc.com, christophe.leroy@csgroup.eu,
yangyicong@hisilicon.com, linux-arm-kernel@lists.infradead.org,
hughd@google.com, yang@os.amperecomputing.com, ziy@nvidia.com,
Dev Jain <dev.jain@arm.com>
Subject: [PATCH v5 4/7] mm: Introduce FPB_RESPECT_WRITE for PTE batching infrastructure
Date: Fri, 18 Jul 2025 14:32:41 +0530 [thread overview]
Message-ID: <20250718090244.21092-5-dev.jain@arm.com> (raw)
In-Reply-To: <20250718090244.21092-1-dev.jain@arm.com>
Patch 6 optimizes mprotect() by batch clearing the ptes, masking in the new
protections, and batch setting the ptes. Suppose that the first pte
of the batch is writable - with the current implementation of
folio_pte_batch(), it is not guaranteed that the other ptes in the batch
are already writable too, so we may incorrectly end up setting the
writable bit on all ptes via modify_prot_commit_ptes().
Therefore, introduce FPB_RESPECT_WRITE so that all ptes in the batch
are writable or not.
Signed-off-by: Dev Jain <dev.jain@arm.com>
---
mm/internal.h | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/mm/internal.h b/mm/internal.h
index 5b0f71e5434b..28d2d5b051df 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -208,17 +208,20 @@ typedef int __bitwise fpb_t;
/* Compare PTEs respecting the soft-dirty bit. */
#define FPB_RESPECT_SOFT_DIRTY ((__force fpb_t)BIT(1))
+/* Compare PTEs respecting the writable bit. */
+#define FPB_RESPECT_WRITE ((__force fpb_t)BIT(2))
+
/*
* Merge PTE write bits: if any PTE in the batch is writable, modify the
* PTE at @ptentp to be writable.
*/
-#define FPB_MERGE_WRITE ((__force fpb_t)BIT(2))
+#define FPB_MERGE_WRITE ((__force fpb_t)BIT(3))
/*
* Merge PTE young and dirty bits: if any PTE in the batch is young or dirty,
* modify the PTE at @ptentp to be young or dirty, respectively.
*/
-#define FPB_MERGE_YOUNG_DIRTY ((__force fpb_t)BIT(3))
+#define FPB_MERGE_YOUNG_DIRTY ((__force fpb_t)BIT(4))
static inline pte_t __pte_batch_clear_ignored(pte_t pte, fpb_t flags)
{
@@ -226,7 +229,9 @@ static inline pte_t __pte_batch_clear_ignored(pte_t pte, fpb_t flags)
pte = pte_mkclean(pte);
if (likely(!(flags & FPB_RESPECT_SOFT_DIRTY)))
pte = pte_clear_soft_dirty(pte);
- return pte_wrprotect(pte_mkold(pte));
+ if (likely(!(flags & FPB_RESPECT_WRITE)))
+ pte = pte_wrprotect(pte);
+ return pte_mkold(pte);
}
/**
--
2.30.2
next prev parent reply other threads:[~2025-07-18 9:15 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-18 9:02 [PATCH v5 0/7] Optimize mprotect() for large folios Dev Jain
2025-07-18 9:02 ` [PATCH v5 1/7] mm: Refactor MM_CP_PROT_NUMA skipping case into new function Dev Jain
2025-07-18 16:19 ` Lorenzo Stoakes
2025-07-20 23:44 ` Barry Song
2025-07-21 3:44 ` Dev Jain
2025-07-22 11:05 ` Dev Jain
2025-07-22 11:25 ` Ryan Roberts
2025-07-23 13:57 ` Zi Yan
2025-07-18 9:02 ` [PATCH v5 2/7] mm: Optimize mprotect() for MM_CP_PROT_NUMA by batch-skipping PTEs Dev Jain
2025-07-18 16:40 ` Lorenzo Stoakes
2025-07-22 11:26 ` Ryan Roberts
2025-07-23 14:25 ` Zi Yan
2025-07-18 9:02 ` [PATCH v5 3/7] mm: Add batched versions of ptep_modify_prot_start/commit Dev Jain
2025-07-18 17:05 ` Lorenzo Stoakes
2025-07-20 23:59 ` Barry Song
2025-07-22 11:35 ` Ryan Roberts
2025-07-23 15:09 ` Zi Yan
2025-07-18 9:02 ` Dev Jain [this message]
2025-07-18 17:12 ` [PATCH v5 4/7] mm: Introduce FPB_RESPECT_WRITE for PTE batching infrastructure Lorenzo Stoakes
2025-07-22 11:37 ` Ryan Roberts
2025-07-23 15:28 ` Zi Yan
2025-07-23 15:32 ` Dev Jain
2025-07-18 9:02 ` [PATCH v5 5/7] mm: Split can_change_pte_writable() into private and shared parts Dev Jain
2025-07-18 17:27 ` Lorenzo Stoakes
2025-07-23 15:40 ` Zi Yan
2025-07-18 9:02 ` [PATCH v5 6/7] mm: Optimize mprotect() by PTE batching Dev Jain
2025-07-18 18:49 ` Lorenzo Stoakes
2025-07-19 13:46 ` Dev Jain
2025-07-20 11:20 ` Lorenzo Stoakes
2025-07-20 14:39 ` Dev Jain
2025-07-24 19:55 ` Zi Yan
2025-08-06 8:08 ` David Hildenbrand
2025-08-06 8:12 ` David Hildenbrand
2025-08-06 8:15 ` Will Deacon
2025-08-06 8:19 ` David Hildenbrand
2025-08-06 8:53 ` Dev Jain
2025-08-06 8:56 ` David Hildenbrand
2025-08-06 9:12 ` Lorenzo Stoakes
2025-08-06 9:21 ` David Hildenbrand
2025-08-06 9:37 ` Dev Jain
2025-08-06 9:50 ` Lorenzo Stoakes
2025-08-06 10:04 ` Dev Jain
2025-08-06 10:07 ` Dev Jain
2025-08-06 10:12 ` David Hildenbrand
2025-08-06 10:11 ` David Hildenbrand
2025-08-06 10:20 ` Dev Jain
2025-08-06 10:28 ` David Hildenbrand
2025-08-06 10:45 ` Lorenzo Stoakes
2025-08-06 10:45 ` Lorenzo Stoakes
2025-07-18 9:02 ` [PATCH v5 7/7] arm64: Add batched versions of ptep_modify_prot_start/commit Dev Jain
2025-07-18 18:50 ` Lorenzo Stoakes
2025-07-21 15:57 ` Catalin Marinas
2025-07-18 9:50 ` [PATCH v5 0/7] Optimize mprotect() for large folios Dev Jain
2025-07-18 18:53 ` Lorenzo Stoakes
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=20250718090244.21092-5-dev.jain@arm.com \
--to=dev.jain@arm.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=baohua@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=christophe.leroy@csgroup.eu \
--cc=david@redhat.com \
--cc=hughd@google.com \
--cc=ioworker0@gmail.com \
--cc=jannh@google.com \
--cc=joey.gouly@arm.com \
--cc=kevin.brodsky@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=peterx@redhat.com \
--cc=quic_zhenhuah@quicinc.com \
--cc=ryan.roberts@arm.com \
--cc=vbabka@suse.cz \
--cc=will@kernel.org \
--cc=willy@infradead.org \
--cc=yang@os.amperecomputing.com \
--cc=yangyicong@hisilicon.com \
--cc=ziy@nvidia.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.