All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: peterx@redhat.com, Minchan Kim <minchan@kernel.org>,
	David Hildenbrand <david@redhat.com>,
	Nadav Amit <nadav.amit@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>, Vlastimil Babka <vbabka@suse.cz>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Andi Kleen <andi.kleen@intel.com>,
	Huang Ying <ying.huang@intel.com>,
	"Kirill A . Shutemov" <kirill@shutemov.name>
Subject: [PATCH v3 4/7] mm/thp: Carry over dirty bit when thp splits on pmd
Date: Tue,  9 Aug 2022 18:00:57 -0400	[thread overview]
Message-ID: <20220809220100.20033-5-peterx@redhat.com> (raw)
In-Reply-To: <20220809220100.20033-1-peterx@redhat.com>

Carry over the dirty bit from pmd to pte when a huge pmd splits.  It
shouldn't be a correctness issue since when pmd_dirty() we'll have the page
marked dirty anyway, however having dirty bit carried over helps the next
initial writes of split ptes on some archs like x86.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 mm/huge_memory.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 0611b2fd145a..e8e78d1bac5f 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -2005,7 +2005,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
 	pgtable_t pgtable;
 	pmd_t old_pmd, _pmd;
 	bool young, write, soft_dirty, pmd_migration = false, uffd_wp = false;
-	bool anon_exclusive = false;
+	bool anon_exclusive = false, dirty = false;
 	unsigned long addr;
 	int i;
 
@@ -2098,6 +2098,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
 			SetPageDirty(page);
 		write = pmd_write(old_pmd);
 		young = pmd_young(old_pmd);
+		dirty = pmd_dirty(old_pmd);
 		soft_dirty = pmd_soft_dirty(old_pmd);
 		uffd_wp = pmd_uffd_wp(old_pmd);
 
@@ -2161,6 +2162,9 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
 				entry = pte_wrprotect(entry);
 			if (!young)
 				entry = pte_mkold(entry);
+			/* NOTE: this may set soft-dirty too on some archs */
+			if (dirty)
+				entry = pte_mkdirty(entry);
 			if (soft_dirty)
 				entry = pte_mksoft_dirty(entry);
 			if (uffd_wp)
-- 
2.32.0


  parent reply	other threads:[~2022-08-09 22:02 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-09 22:00 [PATCH v3 0/7] mm: Remember a/d bits for migration entries Peter Xu
2022-08-09 22:00 ` [PATCH v3 1/7] mm/x86: Use SWP_TYPE_BITS in 3-level swap macros Peter Xu
2022-08-10  1:13   ` Huang, Ying
2022-08-09 22:00 ` [PATCH v3 2/7] mm/swap: Comment all the ifdef in swapops.h Peter Xu
2022-08-10  1:19   ` Huang, Ying
2022-08-09 22:00 ` [PATCH v3 3/7] mm/swap: Add swp_offset_pfn() to fetch PFN from swap entry Peter Xu
2022-08-10  6:04   ` Huang, Ying
2022-08-10 13:17     ` Peter Xu
2022-08-09 22:00 ` Peter Xu [this message]
2022-08-10  6:24   ` [PATCH v3 4/7] mm/thp: Carry over dirty bit when thp splits on pmd Huang, Ying
2022-08-10 15:13     ` Peter Xu
2022-08-09 22:00 ` [PATCH v3 5/7] mm: Remember young/dirty bit for page migrations Peter Xu
2022-08-10  6:30   ` Huang, Ying
2022-08-10 15:19     ` Peter Xu
2022-08-11 15:19   ` Peter Xu
2022-08-12  2:32     ` Huang, Ying
2022-08-15 19:18       ` Peter Xu
2022-08-15 20:52         ` Nadav Amit
2022-08-15 21:03           ` Nadav Amit
2022-08-18 16:39             ` Dave Hansen
2022-08-17  1:49           ` Huang, Ying
2022-08-09 22:00 ` [PATCH v3 6/7] mm/swap: Cache maximum swapfile size when init swap Peter Xu
2022-08-10  6:33   ` Huang, Ying
2022-08-10 13:23     ` Peter Xu
2022-08-09 22:01 ` [PATCH v3 7/7] mm/swap: Cache swap migration A/D bits support Peter Xu
2022-08-10  6:37   ` Huang, Ying
2022-08-10 17:09     ` Peter Xu

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=20220809220100.20033-5-peterx@redhat.com \
    --to=peterx@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=andi.kleen@intel.com \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=nadav.amit@gmail.com \
    --cc=vbabka@suse.cz \
    --cc=ying.huang@intel.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.