hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/arch/arm/include/asm/pgtable.h
....@@ -1,11 +1,8 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * arch/arm/include/asm/pgtable.h
34 *
45 * Copyright (C) 1995-2002 Russell King
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License version 2 as
8
- * published by the Free Software Foundation.
96 */
107 #ifndef _ASMARM_PGTABLE_H
118 #define _ASMARM_PGTABLE_H
....@@ -13,14 +10,22 @@
1310 #include <linux/const.h>
1411 #include <asm/proc-fns.h>
1512
13
+#ifndef __ASSEMBLY__
14
+/*
15
+ * ZERO_PAGE is a global shared page that is always zero: used
16
+ * for zero-mapped memory areas etc..
17
+ */
18
+extern struct page *empty_zero_page;
19
+#define ZERO_PAGE(vaddr) (empty_zero_page)
20
+#endif
21
+
1622 #ifndef CONFIG_MMU
1723
18
-#include <asm-generic/4level-fixup.h>
24
+#include <asm-generic/pgtable-nopud.h>
1925 #include <asm/pgtable-nommu.h>
2026
2127 #else
2228
23
-#define __ARCH_USE_5LEVEL_HACK
2429 #include <asm-generic/pgtable-nopud.h>
2530 #include <asm/memory.h>
2631 #include <asm/pgtable-hwdef.h>
....@@ -83,9 +88,6 @@
8388
8489 extern pgprot_t pgprot_user;
8590 extern pgprot_t pgprot_kernel;
86
-extern pgprot_t pgprot_hyp_device;
87
-extern pgprot_t pgprot_s2;
88
-extern pgprot_t pgprot_s2_device;
8991
9092 #define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b))
9193
....@@ -98,12 +100,6 @@
98100 #define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY)
99101 #define PAGE_KERNEL _MOD_PROT(pgprot_kernel, L_PTE_XN)
100102 #define PAGE_KERNEL_EXEC pgprot_kernel
101
-#define PAGE_HYP _MOD_PROT(pgprot_kernel, L_PTE_HYP | L_PTE_XN)
102
-#define PAGE_HYP_EXEC _MOD_PROT(pgprot_kernel, L_PTE_HYP | L_PTE_RDONLY)
103
-#define PAGE_HYP_RO _MOD_PROT(pgprot_kernel, L_PTE_HYP | L_PTE_RDONLY | L_PTE_XN)
104
-#define PAGE_HYP_DEVICE _MOD_PROT(pgprot_hyp_device, L_PTE_HYP)
105
-#define PAGE_S2 _MOD_PROT(pgprot_s2, L_PTE_S2_RDONLY | L_PTE_XN)
106
-#define PAGE_S2_DEVICE _MOD_PROT(pgprot_s2_device, L_PTE_S2_RDONLY | L_PTE_XN)
107103
108104 #define __PAGE_NONE __pgprot(_L_PTE_DEFAULT | L_PTE_RDONLY | L_PTE_XN | L_PTE_NONE)
109105 #define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_XN)
....@@ -124,6 +120,9 @@
124120
125121 #define pgprot_stronglyordered(prot) \
126122 __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED)
123
+
124
+#define pgprot_device(prot) \
125
+ __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_DEV_SHARED | L_PTE_SHARED | L_PTE_DIRTY | L_PTE_XN)
127126
128127 #ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE
129128 #define pgprot_dmacoherent(prot) \
....@@ -166,23 +165,8 @@
166165 #define __S111 __PAGE_SHARED_EXEC
167166
168167 #ifndef __ASSEMBLY__
169
-/*
170
- * ZERO_PAGE is a global shared page that is always zero: used
171
- * for zero-mapped memory areas etc..
172
- */
173
-extern struct page *empty_zero_page;
174
-#define ZERO_PAGE(vaddr) (empty_zero_page)
175
-
176168
177169 extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
178
-
179
-/* to find an entry in a page-table-directory */
180
-#define pgd_index(addr) ((addr) >> PGDIR_SHIFT)
181
-
182
-#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr))
183
-
184
-/* to find an entry in a kernel page-table-directory */
185
-#define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
186170
187171 #define pmd_none(pmd) (!pmd_val(pmd))
188172
....@@ -192,21 +176,6 @@
192176 }
193177
194178 #define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd) & PHYS_MASK))
195
-
196
-#ifndef CONFIG_HIGHPTE
197
-#define __pte_map(pmd) pmd_page_vaddr(*(pmd))
198
-#define __pte_unmap(pte) do { } while (0)
199
-#else
200
-#define __pte_map(pmd) (pte_t *)kmap_atomic(pmd_page(*(pmd)))
201
-#define __pte_unmap(pte) kunmap_atomic(pte)
202
-#endif
203
-
204
-#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
205
-
206
-#define pte_offset_kernel(pmd,addr) (pmd_page_vaddr(*(pmd)) + pte_index(addr))
207
-
208
-#define pte_offset_map(pmd,addr) (__pte_map(pmd) + pte_index(addr))
209
-#define pte_unmap(pte) __pte_unmap(pte)
210179
211180 #define pte_pfn(pte) ((pte_val(pte) & PHYS_MASK) >> PAGE_SHIFT)
212181 #define pfn_pte(pfn,prot) __pte(__pfn_to_phys(pfn) | pgprot_val(prot))
....@@ -252,19 +221,8 @@
252221 extern void __sync_icache_dcache(pte_t pteval);
253222 #endif
254223
255
-static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
256
- pte_t *ptep, pte_t pteval)
257
-{
258
- unsigned long ext = 0;
259
-
260
- if (addr < TASK_SIZE && pte_valid_user(pteval)) {
261
- if (!pte_special(pteval))
262
- __sync_icache_dcache(pteval);
263
- ext |= PTE_EXT_NG;
264
- }
265
-
266
- set_pte_ext(ptep, pteval, ext);
267
-}
224
+void set_pte_at(struct mm_struct *mm, unsigned long addr,
225
+ pte_t *ptep, pte_t pteval);
268226
269227 static inline pte_t clear_pte_bit(pte_t pte, pgprot_t prot)
270228 {
....@@ -360,15 +318,11 @@
360318 /* FIXME: this is not correct */
361319 #define kern_addr_valid(addr) (1)
362320
363
-#include <asm-generic/pgtable.h>
364
-
365321 /*
366322 * We provide our own arch_get_unmapped_area to cope with VIPT caches.
367323 */
368324 #define HAVE_ARCH_UNMAPPED_AREA
369325 #define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
370
-
371
-#define pgtable_cache_init() do { } while (0)
372326
373327 #endif /* !__ASSEMBLY__ */
374328