mm: remove __HAVE_ARCH_PTE_SWP_EXCLUSIVE
authorDavid Hildenbrand <david@redhat.com>
Fri, 13 Jan 2023 17:10:26 +0000 (18:10 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 3 Feb 2023 06:33:11 +0000 (22:33 -0800)
__HAVE_ARCH_PTE_SWP_EXCLUSIVE is now supported by all architectures that
support swp PTEs, so let's drop it.

Link: https://lkml.kernel.org/r/20230113171026.582290-27-david@redhat.com
Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
31 files changed:
arch/alpha/include/asm/pgtable.h
arch/arc/include/asm/pgtable-bits-arcv2.h
arch/arm/include/asm/pgtable.h
arch/arm64/include/asm/pgtable.h
arch/csky/include/asm/pgtable.h
arch/hexagon/include/asm/pgtable.h
arch/ia64/include/asm/pgtable.h
arch/loongarch/include/asm/pgtable.h
arch/m68k/include/asm/mcf_pgtable.h
arch/m68k/include/asm/motorola_pgtable.h
arch/m68k/include/asm/sun3_pgtable.h
arch/microblaze/include/asm/pgtable.h
arch/mips/include/asm/pgtable.h
arch/nios2/include/asm/pgtable.h
arch/openrisc/include/asm/pgtable.h
arch/parisc/include/asm/pgtable.h
arch/powerpc/include/asm/book3s/32/pgtable.h
arch/powerpc/include/asm/book3s/64/pgtable.h
arch/powerpc/include/asm/nohash/pgtable.h
arch/riscv/include/asm/pgtable.h
arch/s390/include/asm/pgtable.h
arch/sh/include/asm/pgtable_32.h
arch/sparc/include/asm/pgtable_32.h
arch/sparc/include/asm/pgtable_64.h
arch/um/include/asm/pgtable.h
arch/x86/include/asm/pgtable.h
arch/xtensa/include/asm/pgtable.h
include/linux/pgtable.h
mm/debug_vm_pgtable.c
mm/memory.c
mm/rmap.c

index 970abf511b13b6ac8ae372b64475dec97bcb8e5e..ba43cb841d19ca752aa1548415f627f14acc3884 100644 (file)
@@ -328,7 +328,6 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 611f412713b9f5f28d3bd4f26d3ae1e653b4b59b..6e9f8ca6d6a16c1024483f4204fc763eda57fd45 100644 (file)
@@ -132,7 +132,6 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 886c275995a278f0c02ff6781a3f99848373e904..2e626e6da9a34fd5572d8800e2388b6e61d43fd1 100644 (file)
@@ -298,7 +298,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(swp)        __pte((swp).val)
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_isset(pte, L_PTE_SWP_EXCLUSIVE);
index 65e78999c75d76ea8e1443baec542d5f80c871d9..575c63de894f4b69c0328bd78f67795c0983ad42 100644 (file)
@@ -417,7 +417,6 @@ static inline pgprot_t mk_pmd_sect_prot(pgprot_t prot)
        return __pgprot((pgprot_val(prot) & ~PMD_TABLE_BIT) | PMD_TYPE_SECT);
 }
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline pte_t pte_swp_mkexclusive(pte_t pte)
 {
        return set_pte_bit(pte, __pgprot(PTE_SWP_EXCLUSIVE));
index 574c97b9ecca3b51f8303d5d6e4a4d29e9b409fc..d4042495febc0632e67b51548c21c9f624fce179 100644 (file)
@@ -200,7 +200,6 @@ static inline pte_t pte_mkyoung(pte_t pte)
        return pte;
 }
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 7eb008e477c8b090974d79b6c9293dde898189ee..59393613d0862e6ad73ea2b4146f9fa556e45d8f 100644 (file)
@@ -397,7 +397,6 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
                (((type & 0x1f) << 1) | \
                 ((offset & 0x3ffff8) << 10) | ((offset & 0x7) << 7)) })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index e4b8ab931399526394671c89dcd38a220fec1a49..21c97e31a28aebb50eac553e0ec7df50f6d9470c 100644 (file)
@@ -424,7 +424,6 @@ extern void paging_init (void);
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index c6b8fe7ac43ce6c236e54c0eb150e881b833b60b..d28fb9dbec5966c8dfc7ad07e5ae5908f61ed1af 100644 (file)
@@ -276,7 +276,6 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
 #define __pmd_to_swp_entry(pmd) ((swp_entry_t) { pmd_val(pmd) })
 #define __swp_entry_to_pmd(x)  ((pmd_t) { (x).val | _PAGE_HUGE })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index e573d7b649f7260f691f51d80b06688b1bafd53e..13741c1245e1ab669248973ef33f1db967c5036e 100644 (file)
@@ -275,7 +275,6 @@ extern pgd_t kernel_pg_dir[PTRS_PER_PGD];
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  (__pte((x).val))
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index c1782563e7934053c6689bc55fac75bb757cb578..ec0dc19ab8343d74ecb9717f314514553379b124 100644 (file)
@@ -190,7 +190,6 @@ extern pgd_t kernel_pg_dir[128];
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index dbfc9703b15d0193cdb3eb92d545dbc3b2622274..e582b0484a55cd82e2a2a5a1ee958099cff04afb 100644 (file)
@@ -174,7 +174,6 @@ extern pgd_t kernel_pg_dir[PTRS_PER_PGD];
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 7e3de54bf4261026ad3fecb3f573f58422aec9d9..d1b8272abcd9bf60a2ec51cc62ae106cce53f254 100644 (file)
@@ -412,7 +412,6 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) >> 2 })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val << 2 })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 711874cee8e4d24878887683fd8f826347365d48..791389bf3c1247a065f3782c83f184f03c9593fd 100644 (file)
@@ -528,7 +528,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
 }
 #endif
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
 static inline int pte_swp_exclusive(pte_t pte)
 {
index 05999da017316bcaedd75c8433634e4477c3c505..0f5c2564e9f59ecd06d9789bf4eb7c61504bfb3c 100644 (file)
@@ -253,7 +253,6 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
 #define __swp_entry_to_pte(swp)        ((pte_t) { (swp).val })
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 903b32d662ab16e1718061a5ede134c7b82790f6..3eb9b9555d0df666b45cfc1b572ef2b83d41f075 100644 (file)
@@ -408,7 +408,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 3033bb88df346e5347b323cd3594d8a0cb6e38e5..e2950f5db7c9cf621f1409dc532d2c86591df759 100644 (file)
@@ -422,7 +422,6 @@ extern void paging_init (void);
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 0ecb3a58f23fc1c9cfda90ac99469c86d2a1eb75..7bf1fe7297c638ed713a9d98aeb5e08c6ea70a48 100644 (file)
@@ -386,7 +386,6 @@ static inline void __ptep_set_access_flags(struct vm_area_struct *vma,
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) >> 3 })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val << 3 })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index cb4c67bf45d7129f20fbea56e4cf6681d27c785e..4acc9690f59996c30b79cd2d6eb7d1847fd585b4 100644 (file)
@@ -717,7 +717,6 @@ static inline pte_t pte_swp_clear_soft_dirty(pte_t pte)
 }
 #endif /* CONFIG_HAVE_ARCH_SOFT_DIRTY */
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline pte_t pte_swp_mkexclusive(pte_t pte)
 {
        return __pte_raw(pte_raw(pte) | cpu_to_be64(_PAGE_SWP_EXCLUSIVE));
index 5f4620940c2cde308ad17815c9ee35a59e05ac03..a6caaaab6f9222c470a58c1bf2b91637bab870a2 100644 (file)
@@ -151,7 +151,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
        return __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot));
 }
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 03a4728db039b5bfd0e8c6640b703bff0107c074..5b9f409a940d87f6d2deff2f61fb645794772c9f 100644 (file)
@@ -752,7 +752,6 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index b26cbf1c533c9fa4034a6fc4aac648f0ac9c2068..2b5db99e31dd77b17c920007b7e1c97f49d2688a 100644 (file)
@@ -812,7 +812,6 @@ static inline int pmd_protnone(pmd_t pmd)
 }
 #endif
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index c34aa795a9d217d363fd60c7abeff10c6054ab16..21952b0946509f255c33971e8de8f0184f529223 100644 (file)
@@ -479,7 +479,6 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
 /* In both cases, we borrow bit 6 to store the exclusive marker in swap PTEs. */
 #define _PAGE_SWP_EXCLUSIVE    _PAGE_USER
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte.pte_low & _PAGE_SWP_EXCLUSIVE;
index abf7a260120984aa8134640a424ddeb9291a2181..d4330e3c57a6e57035d75c2b472696a579f9f357 100644 (file)
@@ -353,7 +353,6 @@ static inline swp_entry_t __swp_entry(unsigned long type, unsigned long offset)
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & SRMMU_SWP_EXCLUSIVE;
index a1658eebd036c8993d25ead159768af63fed1e0c..2dc8d4641734677213056be76d9c35415382f803 100644 (file)
@@ -989,7 +989,6 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
 #define __pte_to_swp_entry(pte)                ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index cedc5fd451ce556ce72c5a3fd1e7a2011b0547d5..a70d1618eb35f2dc74dba0db35ee444b1d6658db 100644 (file)
@@ -313,7 +313,6 @@ extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr);
        ((swp_entry_t) { pte_val(pte_mkuptodate(pte)) })
 #define __swp_entry_to_pte(x)          ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_get_bits(pte, _PAGE_SWP_EXCLUSIVE);
index d25195726b788a13d2ee0df879b3187b13438706..7425f32e5293291ba2479e85ff478b200551e2b4 100644 (file)
@@ -1299,7 +1299,6 @@ static inline void update_mmu_cache_pud(struct vm_area_struct *vma,
                unsigned long addr, pud_t *pud)
 {
 }
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline pte_t pte_swp_mkexclusive(pte_t pte)
 {
        return pte_set_flags(pte, _PAGE_SWP_EXCLUSIVE);
index 1025e2dc292bf26964007deed1d54c7c56676e93..fc7a14884c6c3b372e12c4c5ff5f2b36f0b93700 100644 (file)
@@ -360,7 +360,6 @@ ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
 #define __pte_to_swp_entry(pte)        ((swp_entry_t) { pte_val(pte) })
 #define __swp_entry_to_pte(x)  ((pte_t) { (x).val })
 
-#define __HAVE_ARCH_PTE_SWP_EXCLUSIVE
 static inline int pte_swp_exclusive(pte_t pte)
 {
        return pte_val(pte) & _PAGE_SWP_EXCLUSIVE;
index 1159b25b054273a05cdf511d13751406b96b67a1..5fd45454c073f6bf5524ffd9ec1f71fa2b5a1815 100644 (file)
@@ -1064,35 +1064,6 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
 #define arch_start_context_switch(prev)        do {} while (0)
 #endif
 
-/*
- * When replacing an anonymous page by a real (!non) swap entry, we clear
- * PG_anon_exclusive from the page and instead remember whether the flag was
- * set in the swp pte. During fork(), we have to mark the entry as !exclusive
- * (possibly shared). On swapin, we use that information to restore
- * PG_anon_exclusive, which is very helpful in cases where we might have
- * additional (e.g., FOLL_GET) references on a page and wouldn't be able to
- * detect exclusivity.
- *
- * These functions don't apply to non-swap entries (e.g., migration, hwpoison,
- * ...).
- */
-#ifndef __HAVE_ARCH_PTE_SWP_EXCLUSIVE
-static inline pte_t pte_swp_mkexclusive(pte_t pte)
-{
-       return pte;
-}
-
-static inline int pte_swp_exclusive(pte_t pte)
-{
-       return false;
-}
-
-static inline pte_t pte_swp_clear_exclusive(pte_t pte)
-{
-       return pte;
-}
-#endif
-
 #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY
 #ifndef CONFIG_ARCH_ENABLE_THP_MIGRATION
 static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd)
index ff8d6f6af8962f161510050addadb4b37f53cf25..af59cc7bd307198556a4915edc59e83737c50c94 100644 (file)
@@ -810,7 +810,6 @@ static void __init pmd_swap_soft_dirty_tests(struct pgtable_debug_args *args) {
 
 static void __init pte_swap_exclusive_tests(struct pgtable_debug_args *args)
 {
-#ifdef __HAVE_ARCH_PTE_SWP_EXCLUSIVE
        unsigned long max_swap_offset;
        swp_entry_t entry, entry2;
        pte_t pte;
@@ -841,7 +840,6 @@ static void __init pte_swap_exclusive_tests(struct pgtable_debug_args *args)
        WARN_ON(!is_swap_pte(pte));
        entry2 = pte_to_swp_entry(pte);
        WARN_ON(memcmp(&entry, &entry2, sizeof(entry)));
-#endif /* __HAVE_ARCH_PTE_SWP_EXCLUSIVE */
 }
 
 static void __init pte_swap_tests(struct pgtable_debug_args *args)
index c6bacd58d032a1028eef949ae32a826c4930a371..87b33b4967c23e8aa027285b461b343e1d997389 100644 (file)
@@ -3864,10 +3864,6 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
         * the swap entry concurrently) for certainly exclusive pages.
         */
        if (!folio_test_ksm(folio)) {
-               /*
-                * Note that pte_swp_exclusive() == false for architectures
-                * without __HAVE_ARCH_PTE_SWP_EXCLUSIVE.
-                */
                exclusive = pte_swp_exclusive(vmf->orig_pte);
                if (folio != swapcache) {
                        /*
index 073999f78adfaa33e7e8586f15e2010ba735c7c6..0d07c500fc864e0cbf8f28575ecd1273fe618a28 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -1710,17 +1710,6 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma,
                                page_vma_mapped_walk_done(&pvmw);
                                break;
                        }
-                       /*
-                        * Note: We *don't* remember if the page was mapped
-                        * exclusively in the swap pte if the architecture
-                        * doesn't support __HAVE_ARCH_PTE_SWP_EXCLUSIVE. In
-                        * that case, swapin code has to re-determine that
-                        * manually and might detect the page as possibly
-                        * shared, for example, if there are other references on
-                        * the page or if the page is under writeback. We made
-                        * sure that there are no GUP pins on the page that
-                        * would rely on it, so for GUP pins this is fine.
-                        */
                        if (list_empty(&mm->mmlist)) {
                                spin_lock(&mmlist_lock);
                                if (list_empty(&mm->mmlist))