hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/arch/arm64/include/asm/pgalloc.h
....@@ -1,20 +1,9 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * Based on arch/arm/include/asm/pgalloc.h
34 *
45 * Copyright (C) 2000-2001 Russell King
56 * Copyright (C) 2012 ARM Ltd.
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License version 2 as
9
- * published by the Free Software Foundation.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
187 */
198 #ifndef __ASM_PGALLOC_H
209 #define __ASM_PGALLOC_H
....@@ -24,23 +13,12 @@
2413 #include <asm/cacheflush.h>
2514 #include <asm/tlbflush.h>
2615
27
-#define check_pgt_cache() do { } while (0)
16
+#define __HAVE_ARCH_PGD_FREE
17
+#include <asm-generic/pgalloc.h>
2818
29
-#define PGALLOC_GFP (GFP_KERNEL | __GFP_ZERO)
3019 #define PGD_SIZE (PTRS_PER_PGD * sizeof(pgd_t))
3120
3221 #if CONFIG_PGTABLE_LEVELS > 2
33
-
34
-static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
35
-{
36
- return (pmd_t *)__get_free_page(PGALLOC_GFP);
37
-}
38
-
39
-static inline void pmd_free(struct mm_struct *mm, pmd_t *pmdp)
40
-{
41
- BUG_ON((unsigned long)pmdp & (PAGE_SIZE-1));
42
- free_page((unsigned long)pmdp);
43
-}
4422
4523 static inline void __pud_populate(pud_t *pudp, phys_addr_t pmdp, pudval_t prot)
4624 {
....@@ -60,28 +38,17 @@
6038
6139 #if CONFIG_PGTABLE_LEVELS > 3
6240
63
-static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
41
+static inline void __p4d_populate(p4d_t *p4dp, phys_addr_t pudp, p4dval_t prot)
6442 {
65
- return (pud_t *)__get_free_page(PGALLOC_GFP);
43
+ set_p4d(p4dp, __p4d(__phys_to_p4d_val(pudp) | prot));
6644 }
6745
68
-static inline void pud_free(struct mm_struct *mm, pud_t *pudp)
46
+static inline void p4d_populate(struct mm_struct *mm, p4d_t *p4dp, pud_t *pudp)
6947 {
70
- BUG_ON((unsigned long)pudp & (PAGE_SIZE-1));
71
- free_page((unsigned long)pudp);
72
-}
73
-
74
-static inline void __pgd_populate(pgd_t *pgdp, phys_addr_t pudp, pgdval_t prot)
75
-{
76
- set_pgd(pgdp, __pgd(__phys_to_pgd_val(pudp) | prot));
77
-}
78
-
79
-static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgdp, pud_t *pudp)
80
-{
81
- __pgd_populate(pgdp, __pa(pudp), PUD_TYPE_TABLE);
48
+ __p4d_populate(p4dp, __pa(pudp), PUD_TYPE_TABLE);
8249 }
8350 #else
84
-static inline void __pgd_populate(pgd_t *pgdp, phys_addr_t pudp, pgdval_t prot)
51
+static inline void __p4d_populate(p4d_t *p4dp, phys_addr_t pudp, p4dval_t prot)
8552 {
8653 BUILD_BUG();
8754 }
....@@ -89,42 +56,6 @@
8956
9057 extern pgd_t *pgd_alloc(struct mm_struct *mm);
9158 extern void pgd_free(struct mm_struct *mm, pgd_t *pgdp);
92
-
93
-static inline pte_t *
94
-pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
95
-{
96
- return (pte_t *)__get_free_page(PGALLOC_GFP);
97
-}
98
-
99
-static inline pgtable_t
100
-pte_alloc_one(struct mm_struct *mm, unsigned long addr)
101
-{
102
- struct page *pte;
103
-
104
- pte = alloc_pages(PGALLOC_GFP, 0);
105
- if (!pte)
106
- return NULL;
107
- if (!pgtable_page_ctor(pte)) {
108
- __free_page(pte);
109
- return NULL;
110
- }
111
- return pte;
112
-}
113
-
114
-/*
115
- * Free a PTE table.
116
- */
117
-static inline void pte_free_kernel(struct mm_struct *mm, pte_t *ptep)
118
-{
119
- if (ptep)
120
- free_page((unsigned long)ptep);
121
-}
122
-
123
-static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
124
-{
125
- pgtable_page_dtor(pte);
126
- __free_page(pte);
127
-}
12859
12960 static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t ptep,
13061 pmdval_t prot)