This source file includes following definitions.
- pmd_populate
- pgd_alloc
- pgd_alloc
- pgd_free
- pte_alloc_one
- pte_free_kernel
- pte_free
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifndef __ASM_OPENRISC_PGALLOC_H
16 #define __ASM_OPENRISC_PGALLOC_H
17
18 #include <asm/page.h>
19 #include <linux/threads.h>
20 #include <linux/mm.h>
21 #include <linux/memblock.h>
22
23 extern int mem_init_done;
24
25 #define pmd_populate_kernel(mm, pmd, pte) \
26 set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)))
27
28 static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
29 struct page *pte)
30 {
31 set_pmd(pmd, __pmd(_KERNPG_TABLE +
32 ((unsigned long)page_to_pfn(pte) <<
33 (unsigned long) PAGE_SHIFT)));
34 }
35
36
37
38
39 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
40 {
41 pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL);
42
43 if (ret) {
44 memset(ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
45 memcpy(ret + USER_PTRS_PER_PGD,
46 swapper_pg_dir + USER_PTRS_PER_PGD,
47 (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
48
49 }
50 return ret;
51 }
52
53 #if 0
54
55
56
57
58 extern inline pgd_t *pgd_alloc(struct mm_struct *mm)
59 {
60 return (pgd_t *)get_zeroed_page(GFP_KERNEL);
61 }
62 #endif
63
64 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
65 {
66 free_page((unsigned long)pgd);
67 }
68
69 extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
70
71 static inline struct page *pte_alloc_one(struct mm_struct *mm)
72 {
73 struct page *pte;
74 pte = alloc_pages(GFP_KERNEL, 0);
75 if (!pte)
76 return NULL;
77 clear_page(page_address(pte));
78 if (!pgtable_pte_page_ctor(pte)) {
79 __free_page(pte);
80 return NULL;
81 }
82 return pte;
83 }
84
85 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
86 {
87 free_page((unsigned long)pte);
88 }
89
90 static inline void pte_free(struct mm_struct *mm, struct page *pte)
91 {
92 pgtable_pte_page_dtor(pte);
93 __free_page(pte);
94 }
95
96 #define __pte_free_tlb(tlb, pte, addr) \
97 do { \
98 pgtable_pte_page_dtor(pte); \
99 tlb_remove_page((tlb), (pte)); \
100 } while (0)
101
102 #define pmd_pgtable(pmd) pmd_page(pmd)
103
104 #endif