[PATCH] s390: Remove PageDirty check inside mk_pte()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In commit abf09bed3cce ("s390/mm: implement software dirty bits"),
the rationale for adding the PageDirty() test was:

    To avoid an excessive number of additional faults the
    mk_pte primitive checks for PageDirty if the pgprot value
    allows for writes and pre-dirties the pte. That avoids all
    additional faults for tmpfs and shmem pages until these
    pages are added to the swap cache.

shmem does not mark newly allocated folios as dirty since 2016 (commit
75edd345e8ed) so this test has been ineffective since then.  It still
triggers for some calls to mk_pte(), but those calls are usually
followed with other calls to pte_mkdirty() making the ones inside
s390's mk_pte() redundant.

Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx>
---
 arch/s390/include/asm/pgtable.h | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

Please check this doesn't cause any real world performance issues.
Alexander and I briefly discussed this last year:
https://lore.kernel.org/linux-mm/20240814154427.162475-5-willy@xxxxxxxxxxxxx/
but then I missed his followup on August 22nd, and thought it best to
reopen the conversation with a fresh patch to test.

diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index 48268095b0a3..4c7e2fc2b5ff 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -1443,11 +1443,8 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
 static inline pte_t mk_pte(struct page *page, pgprot_t pgprot)
 {
 	unsigned long physpage = page_to_phys(page);
-	pte_t __pte = mk_pte_phys(physpage, pgprot);
 
-	if (pte_write(__pte) && PageDirty(page))
-		__pte = pte_mkdirty(__pte);
-	return __pte;
+	return mk_pte_phys(physpage, pgprot);
 }
 
 #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
-- 
2.45.2





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux