Lines Matching +full:mm +full:- +full:0

1 // SPDX-License-Identifier: GPL-2.0-only
3 * linux/arch/arm/mm/pgd.c
5 * Copyright (C) 1998-2005 Russell King
7 #include <linux/mm.h>
17 #include "mm.h"
20 #define _pgd_alloc(mm) kmalloc_array(PTRS_PER_PGD, sizeof(pgd_t), GFP_KERNEL | __GFP_ZERO) argument
21 #define _pgd_free(mm, pgd) kfree(pgd) argument
23 #define _pgd_alloc(mm) __pgd_alloc(mm, 2) argument
24 #define _pgd_free(mm, pgd) __pgd_free(mm, pgd) argument
30 pgd_t *pgd_alloc(struct mm_struct *mm) in pgd_alloc() argument
38 new_pgd = _pgd_alloc(mm); in pgd_alloc()
45 init_pgd = pgd_offset_k(0); in pgd_alloc()
47 (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); in pgd_alloc()
55 new_p4d = p4d_alloc(mm, new_pgd + pgd_index(MODULES_VADDR), in pgd_alloc()
60 new_pud = pud_alloc(mm, new_p4d, MODULES_VADDR); in pgd_alloc()
64 new_pmd = pmd_alloc(mm, new_pud, 0); in pgd_alloc()
77 (pmd_index(MODULES_VADDR) - pmd_index(TASK_SIZE)) in pgd_alloc()
89 new_p4d = p4d_alloc(mm, new_pgd, 0); in pgd_alloc()
93 new_pud = pud_alloc(mm, new_p4d, 0); in pgd_alloc()
97 new_pmd = pmd_alloc(mm, new_pud, 0); in pgd_alloc()
101 new_pte = pte_alloc_map(mm, new_pmd, 0); in pgd_alloc()
115 init_p4d = p4d_offset(init_pgd, 0); in pgd_alloc()
116 init_pud = pud_offset(init_p4d, 0); in pgd_alloc()
117 init_pmd = pmd_offset(init_pud, 0); in pgd_alloc()
118 init_pte = pte_offset_map(init_pmd, 0); in pgd_alloc()
119 set_pte_ext(new_pte + 0, init_pte[0], 0); in pgd_alloc()
120 set_pte_ext(new_pte + 1, init_pte[1], 0); in pgd_alloc()
128 pmd_free(mm, new_pmd); in pgd_alloc()
129 mm_dec_nr_pmds(mm); in pgd_alloc()
131 pud_free(mm, new_pud); in pgd_alloc()
133 p4d_free(mm, new_p4d); in pgd_alloc()
135 _pgd_free(mm, new_pgd); in pgd_alloc()
140 void pgd_free(struct mm_struct *mm, pgd_t *pgd_base) in pgd_free() argument
151 pgd = pgd_base + pgd_index(0); in pgd_free()
155 p4d = p4d_offset(pgd, 0); in pgd_free()
159 pud = pud_offset(p4d, 0); in pgd_free()
163 pmd = pmd_offset(pud, 0); in pgd_free()
169 pte_free(mm, pte); in pgd_free()
170 mm_dec_nr_ptes(mm); in pgd_free()
173 pmd_free(mm, pmd); in pgd_free()
174 mm_dec_nr_pmds(mm); in pgd_free()
177 pud_free(mm, pud); in pgd_free()
180 p4d_free(mm, p4d); in pgd_free()
191 p4d = p4d_offset(pgd, 0); in pgd_free()
194 pud = pud_offset(p4d, 0); in pgd_free()
197 pmd = pmd_offset(pud, 0); in pgd_free()
199 pmd_free(mm, pmd); in pgd_free()
200 mm_dec_nr_pmds(mm); in pgd_free()
202 pud_free(mm, pud); in pgd_free()
203 mm_dec_nr_puds(mm); in pgd_free()
205 p4d_free(mm, p4d); in pgd_free()
208 _pgd_free(mm, pgd_base); in pgd_free()