Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 LT |
2 | /* sun3_pgalloc.h -- |
3 | * reorganization around 2.3.39, routines moved from sun3_pgtable.h | |
4 | * | |
5 | * | |
6 | * 02/27/2002 -- Modified to support "highpte" implementation in 2.5.5 (Sam) | |
7 | * | |
8 | * moved 1/26/2000 Sam Creasey | |
9 | */ | |
10 | ||
11 | #ifndef _SUN3_PGALLOC_H | |
12 | #define _SUN3_PGALLOC_H | |
13 | ||
14 | #include <asm/tlb.h> | |
15 | ||
f9cb654c | 16 | #include <asm-generic/pgalloc.h> |
14c0a39c | 17 | |
1da177e4 LT |
18 | extern const char bad_pmd_string[]; |
19 | ||
9e1b32ca | 20 | #define __pte_free_tlb(tlb,pte,addr) \ |
2f569afd | 21 | do { \ |
b4ed71f5 | 22 | pgtable_pte_page_dtor(pte); \ |
2f569afd MS |
23 | tlb_remove_page((tlb), pte); \ |
24 | } while (0) | |
1da177e4 | 25 | |
1da177e4 LT |
26 | static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) |
27 | { | |
28 | pmd_val(*pmd) = __pa((unsigned long)pte); | |
29 | } | |
30 | ||
2f569afd | 31 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page) |
1da177e4 LT |
32 | { |
33 | pmd_val(*pmd) = __pa((unsigned long)page_address(page)); | |
34 | } | |
2f569afd | 35 | #define pmd_pgtable(pmd) pmd_page(pmd) |
1da177e4 LT |
36 | |
37 | /* | |
38 | * allocating and freeing a pmd is trivial: the 1-entry pmd is | |
39 | * inside the pgd, so has no extra memory associated with it. | |
40 | */ | |
5e541973 | 41 | #define pmd_free(mm, x) do { } while (0) |
1da177e4 | 42 | |
1da177e4 LT |
43 | static inline pgd_t * pgd_alloc(struct mm_struct *mm) |
44 | { | |
45 | pgd_t *new_pgd; | |
46 | ||
47 | new_pgd = (pgd_t *)get_zeroed_page(GFP_KERNEL); | |
48 | memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE); | |
49 | memset(new_pgd, 0, (PAGE_OFFSET >> PGDIR_SHIFT)); | |
50 | return new_pgd; | |
51 | } | |
52 | ||
1da177e4 | 53 | #endif /* SUN3_PGALLOC_H */ |