mm-thp-carry-over-dirty-bit-when-thp-splits-on-pmd.patch removed from -mm tree
The quilt patch titled
Subject: mm/thp: carry over dirty bit when thp splits on pmd
has been removed from the -mm tree. Its filename was
mm-thp-carry-over-dirty-bit-when-thp-splits-on-pmd.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Peter Xu <[email protected]>
Subject: mm/thp: carry over dirty bit when thp splits on pmd
Date: Thu, 11 Aug 2022 12:13:28 -0400
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.
---
mm/huge_memory.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
mm/huge_memory.c renamed from mm/huge_memory.c~mm-thp-carry-over-dirty-bit-when-thp-splits-on-pmd +7 -2
@@ -2037,7 +2037,7 @@ static void __split_huge_pmd_locked(strupgtable_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;
@@ -2126,8 +2126,10 @@ static void __split_huge_pmd_locked(stru uffd_wp =pmd_swp_uffd_wp (old_pmd); }else { page =pmd_page (old_pmd); -if (pmd_dirty (old_pmd)) +if (pmd_dirty (old_pmd)) { + dirty = true;SetPageDirty (page); + } write =pmd_write (old_pmd); young =pmd_young (old_pmd); soft_dirty =pmd_soft_dirty (old_pmd);
@@ -2195,6 +2197,9 @@ static void __split_huge_pmd_locked(stru 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)
_
Patches currently in -mm which might be from [email protected] are