The patch titled Subject: mm/cow: don't bother write protecting already write-protected huge pages has been added to the -mm tree. Its filename is mm-cow-dont-bother-write-protectig-already-write-protected-huge-pages.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-cow-dont-bother-write-protectig-already-write-protected-huge-pages.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-cow-dont-bother-write-protectig-already-write-protected-huge-pages.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Nicholas Piggin <npiggin@xxxxxxxxx> Subject: mm/cow: don't bother write protecting already write-protected huge pages Patch series "mm: dirty/accessed pte optimisations". This patch (of 3): This is the THP equivalent for 1b2de5d039c8 ("mm/cow: don't bother write protecting already write-protected pages"). Explicit hugetlb pages don't get the same treatment because they don't appear to have the right accessor functions. Link: http://lkml.kernel.org/r/20180828112034.30875-2-npiggin@xxxxxxxxx Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/huge_memory.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) --- a/mm/huge_memory.c~mm-cow-dont-bother-write-protectig-already-write-protected-huge-pages +++ a/mm/huge_memory.c @@ -973,8 +973,11 @@ int copy_huge_pmd(struct mm_struct *dst_ mm_inc_nr_ptes(dst_mm); pgtable_trans_huge_deposit(dst_mm, dst_pmd, pgtable); - pmdp_set_wrprotect(src_mm, addr, src_pmd); - pmd = pmd_mkold(pmd_wrprotect(pmd)); + if (pmd_write(pmd)) { + pmdp_set_wrprotect(src_mm, addr, src_pmd); + pmd = pmd_wrprotect(pmd); + } + pmd = pmd_mkold(pmd); set_pmd_at(dst_mm, addr, dst_pmd, pmd); ret = 0; @@ -1064,8 +1067,11 @@ int copy_huge_pud(struct mm_struct *dst_ /* No huge zero pud yet */ } - pudp_set_wrprotect(src_mm, addr, src_pud); - pud = pud_mkold(pud_wrprotect(pud)); + if (pud_write(pud)) { + pudp_set_wrprotect(src_mm, addr, src_pud); + pud = pud_wrprotect(pud); + } + pud = pud_mkold(pud); set_pud_at(dst_mm, addr, dst_pud, pud); ret = 0; _ Patches currently in -mm which might be from npiggin@xxxxxxxxx are mm-cow-dont-bother-write-protectig-already-write-protected-huge-pages.patch mm-cow-optimise-pte-dirty-accessed-bits-handling-in-fork.patch mm-optimise-pte-dirty-accessed-bit-setting-by-demand-based-pte-insertion.patch