hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/arch/alpha/include/asm/pgtable.h
....@@ -2,7 +2,7 @@
22 #ifndef _ALPHA_PGTABLE_H
33 #define _ALPHA_PGTABLE_H
44
5
-#include <asm-generic/4level-fixup.h>
5
+#include <asm-generic/pgtable-nopud.h>
66
77 /*
88 * This file contains the functions and defines necessary to modify and use
....@@ -226,8 +226,8 @@
226226 extern inline void pmd_set(pmd_t * pmdp, pte_t * ptep)
227227 { pmd_val(*pmdp) = _PAGE_TABLE | ((((unsigned long) ptep) - PAGE_OFFSET) << (32-PAGE_SHIFT)); }
228228
229
-extern inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
230
-{ pgd_val(*pgdp) = _PAGE_TABLE | ((((unsigned long) pmdp) - PAGE_OFFSET) << (32-PAGE_SHIFT)); }
229
+extern inline void pud_set(pud_t * pudp, pmd_t * pmdp)
230
+{ pud_val(*pudp) = _PAGE_TABLE | ((((unsigned long) pmdp) - PAGE_OFFSET) << (32-PAGE_SHIFT)); }
231231
232232
233233 extern inline unsigned long
....@@ -238,11 +238,13 @@
238238
239239 #ifndef CONFIG_DISCONTIGMEM
240240 #define pmd_page(pmd) (mem_map + ((pmd_val(pmd) & _PFN_MASK) >> 32))
241
-#define pgd_page(pgd) (mem_map + ((pgd_val(pgd) & _PFN_MASK) >> 32))
241
+#define pud_page(pud) (mem_map + ((pud_val(pud) & _PFN_MASK) >> 32))
242242 #endif
243243
244
-extern inline unsigned long pgd_page_vaddr(pgd_t pgd)
245
-{ return PAGE_OFFSET + ((pgd_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); }
244
+extern inline pmd_t *pud_pgtable(pud_t pgd)
245
+{
246
+ return (pmd_t *)(PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)));
247
+}
246248
247249 extern inline int pte_none(pte_t pte) { return !pte_val(pte); }
248250 extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_VALID; }
....@@ -256,10 +258,10 @@
256258 extern inline int pmd_present(pmd_t pmd) { return pmd_val(pmd) & _PAGE_VALID; }
257259 extern inline void pmd_clear(pmd_t * pmdp) { pmd_val(*pmdp) = 0; }
258260
259
-extern inline int pgd_none(pgd_t pgd) { return !pgd_val(pgd); }
260
-extern inline int pgd_bad(pgd_t pgd) { return (pgd_val(pgd) & ~_PFN_MASK) != _PAGE_TABLE; }
261
-extern inline int pgd_present(pgd_t pgd) { return pgd_val(pgd) & _PAGE_VALID; }
262
-extern inline void pgd_clear(pgd_t * pgdp) { pgd_val(*pgdp) = 0; }
261
+extern inline int pud_none(pud_t pud) { return !pud_val(pud); }
262
+extern inline int pud_bad(pud_t pud) { return (pud_val(pud) & ~_PFN_MASK) != _PAGE_TABLE; }
263
+extern inline int pud_present(pud_t pud) { return pud_val(pud) & _PAGE_VALID; }
264
+extern inline void pud_clear(pud_t * pudp) { pud_val(*pudp) = 0; }
263265
264266 /*
265267 * The following only work if pte_present() is true.
....@@ -268,7 +270,6 @@
268270 extern inline int pte_write(pte_t pte) { return !(pte_val(pte) & _PAGE_FOW); }
269271 extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }
270272 extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
271
-extern inline int pte_special(pte_t pte) { return 0; }
272273
273274 extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_FOW; return pte; }
274275 extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~(__DIRTY_BITS); return pte; }
....@@ -276,21 +277,11 @@
276277 extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_FOW; return pte; }
277278 extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= __DIRTY_BITS; return pte; }
278279 extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; return pte; }
279
-extern inline pte_t pte_mkspecial(pte_t pte) { return pte; }
280
-
281
-#define PAGE_DIR_OFFSET(tsk,address) pgd_offset((tsk),(address))
282
-
283
-/* to find an entry in a kernel page-table-directory */
284
-#define pgd_offset_k(address) pgd_offset(&init_mm, (address))
285
-
286
-/* to find an entry in a page-table-directory. */
287
-#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
288
-#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
289280
290281 /*
291
- * The smp_read_barrier_depends() in the following functions are required to
292
- * order the load of *dir (the pointer in the top level page table) with any
293
- * subsequent load of the returned pmd_t *ret (ret is data dependent on *dir).
282
+ * The smp_rmb() in the following functions are required to order the load of
283
+ * *dir (the pointer in the top level page table) with any subsequent load of
284
+ * the returned pmd_t *ret (ret is data dependent on *dir).
294285 *
295286 * If this ordering is not enforced, the CPU might load an older value of
296287 * *ret, which may be uninitialized data. See mm/memory.c:__pte_alloc for
....@@ -301,24 +292,23 @@
301292 */
302293
303294 /* Find an entry in the second-level page table.. */
304
-extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
295
+extern inline pmd_t * pmd_offset(pud_t * dir, unsigned long address)
305296 {
306
- pmd_t *ret = (pmd_t *) pgd_page_vaddr(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
307
- smp_read_barrier_depends(); /* see above */
297
+ pmd_t *ret = pud_pgtable(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
298
+ smp_rmb(); /* see above */
308299 return ret;
309300 }
301
+#define pmd_offset pmd_offset
310302
311303 /* Find an entry in the third-level page table.. */
312304 extern inline pte_t * pte_offset_kernel(pmd_t * dir, unsigned long address)
313305 {
314306 pte_t *ret = (pte_t *) pmd_page_vaddr(*dir)
315307 + ((address >> PAGE_SHIFT) & (PTRS_PER_PAGE - 1));
316
- smp_read_barrier_depends(); /* see above */
308
+ smp_rmb(); /* see above */
317309 return ret;
318310 }
319
-
320
-#define pte_offset_map(dir,addr) pte_offset_kernel((dir),(addr))
321
-#define pte_unmap(pte) do { } while (0)
311
+#define pte_offset_kernel pte_offset_kernel
322312
323313 extern pgd_t swapper_pg_dir[1024];
324314
....@@ -356,13 +346,6 @@
356346 printk("%s:%d: bad pgd %016lx.\n", __FILE__, __LINE__, pgd_val(e))
357347
358348 extern void paging_init(void);
359
-
360
-#include <asm-generic/pgtable.h>
361
-
362
-/*
363
- * No page table caches to initialise
364
- */
365
-#define pgtable_cache_init() do { } while (0)
366349
367350 /* We have our own get_unmapped_area to cope with ADDR_LIMIT_32BIT. */
368351 #define HAVE_ARCH_UNMAPPED_AREA