Skip to content

Commit d438d27

Browse files
apopple-nvidiaakpm00
authored andcommitted
mm: remove devmap related functions and page table bits
Now that DAX and all other reference counts to ZONE_DEVICE pages are managed normally there is no need for the special devmap PTE/PMD/PUD page table bits. So drop all references to these, freeing up a software defined page table bit on architectures supporting it. Link: https://lkml.kernel.org/r/6389398c32cc9daa3dfcaa9f79c7972525d310ce.1750323463.git-series.apopple@nvidia.com Signed-off-by: Alistair Popple <apopple@nvidia.com> Acked-by: Will Deacon <will@kernel.org> # arm64 Acked-by: David Hildenbrand <david@redhat.com> Suggested-by: Chunyan Zhang <zhang.lyra@gmail.com> Reviewed-by: Björn Töpel <bjorn@rivosinc.com> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Cc: Balbir Singh <balbirs@nvidia.com> Cc: Björn Töpel <bjorn@kernel.org> Cc: Christoph Hellwig <hch@lst.de> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Deepak Gupta <debug@rivosinc.com> Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com> Cc: Inki Dae <m.szyprowski@samsung.com> Cc: John Groves <john@groves.net> Cc: John Hubbard <jhubbard@nvidia.com> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 28dc88c commit d438d27

File tree

25 files changed

+17
-319
lines changed

25 files changed

+17
-319
lines changed

Documentation/mm/arch_pgtable_helpers.rst

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ PTE Page Table Helpers
3030
+---------------------------+--------------------------------------------------+
3131
| pte_protnone | Tests a PROT_NONE PTE |
3232
+---------------------------+--------------------------------------------------+
33-
| pte_devmap | Tests a ZONE_DEVICE mapped PTE |
34-
+---------------------------+--------------------------------------------------+
3533
| pte_soft_dirty | Tests a soft dirty PTE |
3634
+---------------------------+--------------------------------------------------+
3735
| pte_swp_soft_dirty | Tests a soft dirty swapped PTE |
@@ -104,8 +102,6 @@ PMD Page Table Helpers
104102
+---------------------------+--------------------------------------------------+
105103
| pmd_protnone | Tests a PROT_NONE PMD |
106104
+---------------------------+--------------------------------------------------+
107-
| pmd_devmap | Tests a ZONE_DEVICE mapped PMD |
108-
+---------------------------+--------------------------------------------------+
109105
| pmd_soft_dirty | Tests a soft dirty PMD |
110106
+---------------------------+--------------------------------------------------+
111107
| pmd_swp_soft_dirty | Tests a soft dirty swapped PMD |
@@ -177,8 +173,6 @@ PUD Page Table Helpers
177173
+---------------------------+--------------------------------------------------+
178174
| pud_write | Tests a writable PUD |
179175
+---------------------------+--------------------------------------------------+
180-
| pud_devmap | Tests a ZONE_DEVICE mapped PUD |
181-
+---------------------------+--------------------------------------------------+
182176
| pud_mkyoung | Creates a young PUD |
183177
+---------------------------+--------------------------------------------------+
184178
| pud_mkold | Creates an old PUD |

arch/arm64/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ config ARM64
4444
select ARCH_HAS_NONLEAF_PMD_YOUNG if ARM64_HAFT
4545
select ARCH_HAS_PREEMPT_LAZY
4646
select ARCH_HAS_PTDUMP
47-
select ARCH_HAS_PTE_DEVMAP
4847
select ARCH_HAS_PTE_SPECIAL
4948
select ARCH_HAS_HW_PTE_YOUNG
5049
select ARCH_HAS_SETUP_DMA_OPS

arch/arm64/include/asm/pgtable-prot.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#define PTE_SWP_EXCLUSIVE (_AT(pteval_t, 1) << 2) /* only for swp ptes */
1818
#define PTE_DIRTY (_AT(pteval_t, 1) << 55)
1919
#define PTE_SPECIAL (_AT(pteval_t, 1) << 56)
20-
#define PTE_DEVMAP (_AT(pteval_t, 1) << 57)
2120

2221
/*
2322
* PTE_PRESENT_INVALID=1 & PTE_VALID=0 indicates that the pte's fields should be

arch/arm64/include/asm/pgtable.h

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ static inline pteval_t __phys_to_pte_val(phys_addr_t phys)
190190
#define pte_user(pte) (!!(pte_val(pte) & PTE_USER))
191191
#define pte_user_exec(pte) (!(pte_val(pte) & PTE_UXN))
192192
#define pte_cont(pte) (!!(pte_val(pte) & PTE_CONT))
193-
#define pte_devmap(pte) (!!(pte_val(pte) & PTE_DEVMAP))
194193
#define pte_tagged(pte) ((pte_val(pte) & PTE_ATTRINDX_MASK) == \
195194
PTE_ATTRINDX(MT_NORMAL_TAGGED))
196195

@@ -372,11 +371,6 @@ static inline pmd_t pmd_mkcont(pmd_t pmd)
372371
return __pmd(pmd_val(pmd) | PMD_SECT_CONT);
373372
}
374373

375-
static inline pte_t pte_mkdevmap(pte_t pte)
376-
{
377-
return set_pte_bit(pte, __pgprot(PTE_DEVMAP | PTE_SPECIAL));
378-
}
379-
380374
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
381375
static inline int pte_uffd_wp(pte_t pte)
382376
{
@@ -653,14 +647,6 @@ static inline pmd_t pmd_mkhuge(pmd_t pmd)
653647
return __pmd((pmd_val(pmd) & ~mask) | val);
654648
}
655649

656-
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
657-
#define pmd_devmap(pmd) pte_devmap(pmd_pte(pmd))
658-
#endif
659-
static inline pmd_t pmd_mkdevmap(pmd_t pmd)
660-
{
661-
return pte_pmd(set_pte_bit(pmd_pte(pmd), __pgprot(PTE_DEVMAP)));
662-
}
663-
664650
#ifdef CONFIG_ARCH_SUPPORTS_PMD_PFNMAP
665651
#define pmd_special(pte) (!!((pmd_val(pte) & PTE_SPECIAL)))
666652
static inline pmd_t pmd_mkspecial(pmd_t pmd)
@@ -1302,16 +1288,6 @@ static inline int pmdp_set_access_flags(struct vm_area_struct *vma,
13021288
return __ptep_set_access_flags(vma, address, (pte_t *)pmdp,
13031289
pmd_pte(entry), dirty);
13041290
}
1305-
1306-
static inline int pud_devmap(pud_t pud)
1307-
{
1308-
return 0;
1309-
}
1310-
1311-
static inline int pgd_devmap(pgd_t pgd)
1312-
{
1313-
return 0;
1314-
}
13151291
#endif
13161292

13171293
#ifdef CONFIG_PAGE_TABLE_CHECK

arch/loongarch/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ config LOONGARCH
2525
select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS
2626
select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
2727
select ARCH_HAS_PREEMPT_LAZY
28-
select ARCH_HAS_PTE_DEVMAP
2928
select ARCH_HAS_PTE_SPECIAL
3029
select ARCH_HAS_SET_MEMORY
3130
select ARCH_HAS_SET_DIRECT_MAP

arch/loongarch/include/asm/pgtable-bits.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#define _PAGE_PFN_SHIFT 12
2323
#define _PAGE_SWP_EXCLUSIVE_SHIFT 23
2424
#define _PAGE_PFN_END_SHIFT 48
25-
#define _PAGE_DEVMAP_SHIFT 59
2625
#define _PAGE_PRESENT_INVALID_SHIFT 60
2726
#define _PAGE_NO_READ_SHIFT 61
2827
#define _PAGE_NO_EXEC_SHIFT 62
@@ -36,7 +35,6 @@
3635
#define _PAGE_MODIFIED (_ULCAST_(1) << _PAGE_MODIFIED_SHIFT)
3736
#define _PAGE_PROTNONE (_ULCAST_(1) << _PAGE_PROTNONE_SHIFT)
3837
#define _PAGE_SPECIAL (_ULCAST_(1) << _PAGE_SPECIAL_SHIFT)
39-
#define _PAGE_DEVMAP (_ULCAST_(1) << _PAGE_DEVMAP_SHIFT)
4038

4139
/* We borrow bit 23 to store the exclusive marker in swap PTEs. */
4240
#define _PAGE_SWP_EXCLUSIVE (_ULCAST_(1) << _PAGE_SWP_EXCLUSIVE_SHIFT)
@@ -76,8 +74,8 @@
7674
#define __READABLE (_PAGE_VALID)
7775
#define __WRITEABLE (_PAGE_DIRTY | _PAGE_WRITE)
7876

79-
#define _PAGE_CHG_MASK (_PAGE_MODIFIED | _PAGE_SPECIAL | _PAGE_DEVMAP | _PFN_MASK | _CACHE_MASK | _PAGE_PLV)
80-
#define _HPAGE_CHG_MASK (_PAGE_MODIFIED | _PAGE_SPECIAL | _PAGE_DEVMAP | _PFN_MASK | _CACHE_MASK | _PAGE_PLV | _PAGE_HUGE)
77+
#define _PAGE_CHG_MASK (_PAGE_MODIFIED | _PAGE_SPECIAL | _PFN_MASK | _CACHE_MASK | _PAGE_PLV)
78+
#define _HPAGE_CHG_MASK (_PAGE_MODIFIED | _PAGE_SPECIAL | _PFN_MASK | _CACHE_MASK | _PAGE_PLV | _PAGE_HUGE)
8179

8280
#define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_NO_READ | \
8381
_PAGE_USER | _CACHE_CC)

arch/loongarch/include/asm/pgtable.h

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,6 @@ static inline int pte_special(pte_t pte) { return pte_val(pte) & _PAGE_SPECIAL;
409409
static inline pte_t pte_mkspecial(pte_t pte) { pte_val(pte) |= _PAGE_SPECIAL; return pte; }
410410
#endif /* CONFIG_ARCH_HAS_PTE_SPECIAL */
411411

412-
static inline int pte_devmap(pte_t pte) { return !!(pte_val(pte) & _PAGE_DEVMAP); }
413-
static inline pte_t pte_mkdevmap(pte_t pte) { pte_val(pte) |= _PAGE_DEVMAP; return pte; }
414-
415412
#define pte_accessible pte_accessible
416413
static inline unsigned long pte_accessible(struct mm_struct *mm, pte_t a)
417414
{
@@ -540,17 +537,6 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd)
540537
return pmd;
541538
}
542539

543-
static inline int pmd_devmap(pmd_t pmd)
544-
{
545-
return !!(pmd_val(pmd) & _PAGE_DEVMAP);
546-
}
547-
548-
static inline pmd_t pmd_mkdevmap(pmd_t pmd)
549-
{
550-
pmd_val(pmd) |= _PAGE_DEVMAP;
551-
return pmd;
552-
}
553-
554540
static inline struct page *pmd_page(pmd_t pmd)
555541
{
556542
if (pmd_trans_huge(pmd))
@@ -606,11 +592,6 @@ static inline long pmd_protnone(pmd_t pmd)
606592
#define pmd_leaf(pmd) ((pmd_val(pmd) & _PAGE_HUGE) != 0)
607593
#define pud_leaf(pud) ((pud_val(pud) & _PAGE_HUGE) != 0)
608594

609-
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
610-
#define pud_devmap(pud) (0)
611-
#define pgd_devmap(pgd) (0)
612-
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
613-
614595
/*
615596
* We provide our own get_unmapped area to cope with the virtual aliasing
616597
* constraints placed on us by the cache architecture.

arch/powerpc/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ config PPC
149149
select ARCH_HAS_PMEM_API
150150
select ARCH_HAS_PREEMPT_LAZY
151151
select ARCH_HAS_PTDUMP
152-
select ARCH_HAS_PTE_DEVMAP if PPC_BOOK3S_64
153152
select ARCH_HAS_PTE_SPECIAL
154153
select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE && PPC_BOOK3S_64
155154
select ARCH_HAS_SET_MEMORY

arch/powerpc/include/asm/book3s/64/hash-4k.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,6 @@ extern pmd_t hash__pmdp_huge_get_and_clear(struct mm_struct *mm,
168168
extern int hash__has_transparent_hugepage(void);
169169
#endif
170170

171-
static inline pmd_t hash__pmd_mkdevmap(pmd_t pmd)
172-
{
173-
BUG();
174-
return pmd;
175-
}
176-
177171
#endif /* !__ASSEMBLY__ */
178172

179173
#endif /* _ASM_POWERPC_BOOK3S_64_HASH_4K_H */

arch/powerpc/include/asm/book3s/64/hash-64k.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ static inline void mark_hpte_slot_valid(unsigned char *hpte_slot_array,
259259
*/
260260
static inline int hash__pmd_trans_huge(pmd_t pmd)
261261
{
262-
return !!((pmd_val(pmd) & (_PAGE_PTE | H_PAGE_THP_HUGE | _PAGE_DEVMAP)) ==
262+
return !!((pmd_val(pmd) & (_PAGE_PTE | H_PAGE_THP_HUGE)) ==
263263
(_PAGE_PTE | H_PAGE_THP_HUGE));
264264
}
265265

@@ -281,11 +281,6 @@ extern pmd_t hash__pmdp_huge_get_and_clear(struct mm_struct *mm,
281281
extern int hash__has_transparent_hugepage(void);
282282
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
283283

284-
static inline pmd_t hash__pmd_mkdevmap(pmd_t pmd)
285-
{
286-
return __pmd(pmd_val(pmd) | (_PAGE_PTE | H_PAGE_THP_HUGE | _PAGE_DEVMAP));
287-
}
288-
289284
#endif /* __ASSEMBLY__ */
290285

291286
#endif /* _ASM_POWERPC_BOOK3S_64_HASH_64K_H */

0 commit comments

Comments
 (0)