hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/arch/mips/include/asm/pgalloc.h
....@@ -13,6 +13,11 @@
1313 #include <linux/mm.h>
1414 #include <linux/sched.h>
1515
16
+#define __HAVE_ARCH_PMD_ALLOC_ONE
17
+#define __HAVE_ARCH_PUD_ALLOC_ONE
18
+#define __HAVE_ARCH_PGD_FREE
19
+#include <asm-generic/pgalloc.h>
20
+
1621 static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
1722 pte_t *pte)
1823 {
....@@ -50,42 +55,9 @@
5055 free_pages((unsigned long)pgd, PGD_ORDER);
5156 }
5257
53
-static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
54
- unsigned long address)
55
-{
56
- return (pte_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, PTE_ORDER);
57
-}
58
-
59
-static inline struct page *pte_alloc_one(struct mm_struct *mm,
60
- unsigned long address)
61
-{
62
- struct page *pte;
63
-
64
- pte = alloc_pages(GFP_KERNEL, PTE_ORDER);
65
- if (!pte)
66
- return NULL;
67
- clear_highpage(pte);
68
- if (!pgtable_page_ctor(pte)) {
69
- __free_page(pte);
70
- return NULL;
71
- }
72
- return pte;
73
-}
74
-
75
-static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
76
-{
77
- free_pages((unsigned long)pte, PTE_ORDER);
78
-}
79
-
80
-static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
81
-{
82
- pgtable_page_dtor(pte);
83
- __free_pages(pte, PTE_ORDER);
84
-}
85
-
8658 #define __pte_free_tlb(tlb,pte,address) \
8759 do { \
88
- pgtable_page_dtor(pte); \
60
+ pgtable_pte_page_dtor(pte); \
8961 tlb_remove_page((tlb), pte); \
9062 } while (0)
9163
....@@ -94,16 +66,20 @@
9466 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
9567 {
9668 pmd_t *pmd;
69
+ struct page *pg;
9770
98
- pmd = (pmd_t *) __get_free_pages(GFP_KERNEL, PMD_ORDER);
99
- if (pmd)
100
- pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
71
+ pg = alloc_pages(GFP_KERNEL_ACCOUNT, PMD_ORDER);
72
+ if (!pg)
73
+ return NULL;
74
+
75
+ if (!pgtable_pmd_page_ctor(pg)) {
76
+ __free_pages(pg, PMD_ORDER);
77
+ return NULL;
78
+ }
79
+
80
+ pmd = (pmd_t *)page_address(pg);
81
+ pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
10182 return pmd;
102
-}
103
-
104
-static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
105
-{
106
- free_pages((unsigned long)pmd, PMD_ORDER);
10783 }
10884
10985 #define __pmd_free_tlb(tlb, x, addr) pmd_free((tlb)->mm, x)
....@@ -122,21 +98,14 @@
12298 return pud;
12399 }
124100
125
-static inline void pud_free(struct mm_struct *mm, pud_t *pud)
101
+static inline void p4d_populate(struct mm_struct *mm, p4d_t *p4d, pud_t *pud)
126102 {
127
- free_pages((unsigned long)pud, PUD_ORDER);
128
-}
129
-
130
-static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
131
-{
132
- set_pgd(pgd, __pgd((unsigned long)pud));
103
+ set_p4d(p4d, __p4d((unsigned long)pud));
133104 }
134105
135106 #define __pud_free_tlb(tlb, x, addr) pud_free((tlb)->mm, x)
136107
137108 #endif /* __PAGETABLE_PUD_FOLDED */
138
-
139
-#define check_pgt_cache() do { } while (0)
140109
141110 extern void pagetable_init(void);
142111