]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 LT |
2 | #ifndef _CRIS_PGALLOC_H |
3 | #define _CRIS_PGALLOC_H | |
4 | ||
5 | #include <linux/threads.h> | |
6 | #include <linux/mm.h> | |
7 | ||
8 | #define pmd_populate_kernel(mm, pmd, pte) pmd_set(pmd, pte) | |
9 | #define pmd_populate(mm, pmd, pte) pmd_set(pmd, page_address(pte)) | |
2f569afd | 10 | #define pmd_pgtable(pmd) pmd_page(pmd) |
1da177e4 LT |
11 | |
12 | /* | |
13 | * Allocate and free page tables. | |
14 | */ | |
15 | ||
d9b5444e | 16 | static inline pgd_t *pgd_alloc (struct mm_struct *mm) |
1da177e4 LT |
17 | { |
18 | return (pgd_t *)get_zeroed_page(GFP_KERNEL); | |
19 | } | |
20 | ||
5e541973 | 21 | static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) |
1da177e4 LT |
22 | { |
23 | free_page((unsigned long)pgd); | |
24 | } | |
25 | ||
d9b5444e | 26 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) |
1da177e4 | 27 | { |
32d6bd90 | 28 | pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); |
1da177e4 LT |
29 | return pte; |
30 | } | |
31 | ||
2f569afd | 32 | static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) |
1da177e4 LT |
33 | { |
34 | struct page *pte; | |
32d6bd90 | 35 | pte = alloc_pages(GFP_KERNEL|__GFP_ZERO, 0); |
26db3902 KS |
36 | if (!pte) |
37 | return NULL; | |
0da5303b KS |
38 | if (!pgtable_page_ctor(pte)) { |
39 | __free_page(pte); | |
40 | return NULL; | |
41 | } | |
1da177e4 LT |
42 | return pte; |
43 | } | |
44 | ||
5e541973 | 45 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) |
1da177e4 LT |
46 | { |
47 | free_page((unsigned long)pte); | |
48 | } | |
49 | ||
2f569afd | 50 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) |
1da177e4 | 51 | { |
2f569afd | 52 | pgtable_page_dtor(pte); |
1da177e4 LT |
53 | __free_page(pte); |
54 | } | |
55 | ||
9e1b32ca | 56 | #define __pte_free_tlb(tlb,pte,address) \ |
2f569afd MS |
57 | do { \ |
58 | pgtable_page_dtor(pte); \ | |
59 | tlb_remove_page((tlb), pte); \ | |
60 | } while (0) | |
1da177e4 | 61 | |
1da177e4 LT |
62 | #define check_pgt_cache() do { } while (0) |
63 | ||
64 | #endif |