linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Kefeng Wang <wangkefeng.wang@huawei.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	David Hildenbrand <david@redhat.com>,
	Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
	<linux-mm@kvack.org>
Cc: Zi Yan <ziy@nvidia.com>,
	Baolin Wang <baolin.wang@linux.alibaba.com>,
	Ryan Roberts <ryan.roberts@arm.com>, Dev Jain <dev.jain@arm.com>,
	Barry Song <baohua@kernel.org>, Lance Yang <lance.yang@linux.dev>,
	<Liam.Howlett@oracle.com>,
	Kefeng Wang <wangkefeng.wang@huawei.com>
Subject: [PATCH 2/3] mm: mprotect: avoid unnecessary struct page accessing if pte_protnone()
Date: Mon, 13 Oct 2025 20:15:35 +0800	[thread overview]
Message-ID: <20251013121536.2373249-3-wangkefeng.wang@huawei.com> (raw)
In-Reply-To: <20251013121536.2373249-1-wangkefeng.wang@huawei.com>

If the pte_protnone() is true, we could avoid unnecessary struct page
accessing and reduce cache footprint when scanning page tables for prot
numa, the performance test of pmbench memory accessing benchmark
should be benifit, see more commit a818f5363a0e ("autonuma: reduce cache
footprint when scanning page tables").

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
 mm/mprotect.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/mm/mprotect.c b/mm/mprotect.c
index 51a28781de9d..0f31c09c1726 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -118,18 +118,13 @@ static int mprotect_folio_pte_batch(struct folio *folio, pte_t *ptep,
 	return folio_pte_batch_flags(folio, NULL, ptep, &pte, max_nr_ptes, flags);
 }
 
-static bool prot_numa_skip(struct vm_area_struct *vma, unsigned long addr,
-			   pte_t oldpte, pte_t *pte, int target_node,
-			   struct folio *folio)
+static bool prot_numa_skip(struct vm_area_struct *vma, int target_node,
+		struct folio *folio)
 {
 	bool ret = true;
 	bool toptier;
 	int nid;
 
-	/* Avoid TLB flush if possible */
-	if (pte_protnone(oldpte))
-		goto skip;
-
 	if (!folio)
 		goto skip;
 
@@ -307,17 +302,23 @@ static long change_pte_range(struct mmu_gather *tlb,
 			struct page *page;
 			pte_t ptent;
 
+			/*
+			 * Avoid TLB flush if possible and unnecessary struct
+			 * page accessing when prot numa.
+			 */
+			if (prot_numa && pte_protnone(oldpte))
+				continue;
+
 			page = vm_normal_page(vma, addr, oldpte);
 			if (page)
 				folio = page_folio(page);
+
 			/*
 			 * Avoid trapping faults against the zero or KSM
 			 * pages. See similar comment in change_huge_pmd.
 			 */
 			if (prot_numa) {
-				int ret = prot_numa_skip(vma, addr, oldpte, pte,
-							 target_node, folio);
-				if (ret) {
+				if (prot_numa_skip(vma, target_node, folio)) {
 
 					/* determine batch to skip */
 					nr_ptes = mprotect_folio_pte_batch(folio,
-- 
2.43.0



  parent reply	other threads:[~2025-10-13 12:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-13 12:15 [PATCH 0/3] mm: some optimizations for prot numa Kefeng Wang
2025-10-13 12:15 ` [PATCH 1/3] mm: mprotect: always skip dma pinned folio in prot_numa_skip() Kefeng Wang
2025-10-13 15:12   ` Sidhartha Kumar
2025-10-13 15:49   ` David Hildenbrand
2025-10-14  1:42   ` Lance Yang
2025-10-13 12:15 ` Kefeng Wang [this message]
2025-10-13 15:22   ` [PATCH 2/3] mm: mprotect: avoid unnecessary struct page accessing if pte_protnone() Sidhartha Kumar
2025-10-13 15:53   ` David Hildenbrand
2025-10-14  6:06     ` Kefeng Wang
2025-10-14  7:16       ` David Hildenbrand
2025-10-14  8:02         ` Kefeng Wang
2025-10-14  8:56           ` David Hildenbrand
2025-10-14  9:19             ` Kefeng Wang
2025-10-13 12:15 ` [PATCH 3/3] mm: huge_memory: use prot_numa_skip() for pmd folio Kefeng Wang
2025-10-13 15:41   ` Sidhartha Kumar
2025-10-13 15:58   ` David Hildenbrand
2025-10-14  6:10     ` Kefeng Wang
2025-10-14  7:24       ` David Hildenbrand

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=20251013121536.2373249-3-wangkefeng.wang@huawei.com \
    --to=wangkefeng.wang@huawei.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=david@redhat.com \
    --cc=dev.jain@arm.com \
    --cc=lance.yang@linux.dev \
    --cc=linux-mm@kvack.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=ryan.roberts@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox