xref: /linux-6.15/arch/nios2/include/asm/pgalloc.h (revision cbd15b3f)
1*cbd15b3fSLey Foon Tan /*
2*cbd15b3fSLey Foon Tan  * This file is subject to the terms and conditions of the GNU General Public
3*cbd15b3fSLey Foon Tan  * License.  See the file "COPYING" in the main directory of this archive
4*cbd15b3fSLey Foon Tan  * for more details.
5*cbd15b3fSLey Foon Tan  *
6*cbd15b3fSLey Foon Tan  * Copyright (C) 1994 - 2001, 2003 by Ralf Baechle
7*cbd15b3fSLey Foon Tan  * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc.
8*cbd15b3fSLey Foon Tan  */
9*cbd15b3fSLey Foon Tan 
10*cbd15b3fSLey Foon Tan #ifndef _ASM_NIOS2_PGALLOC_H
11*cbd15b3fSLey Foon Tan #define _ASM_NIOS2_PGALLOC_H
12*cbd15b3fSLey Foon Tan 
13*cbd15b3fSLey Foon Tan #include <linux/mm.h>
14*cbd15b3fSLey Foon Tan 
15*cbd15b3fSLey Foon Tan static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
16*cbd15b3fSLey Foon Tan 	pte_t *pte)
17*cbd15b3fSLey Foon Tan {
18*cbd15b3fSLey Foon Tan 	set_pmd(pmd, __pmd((unsigned long)pte));
19*cbd15b3fSLey Foon Tan }
20*cbd15b3fSLey Foon Tan 
21*cbd15b3fSLey Foon Tan static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
22*cbd15b3fSLey Foon Tan 	pgtable_t pte)
23*cbd15b3fSLey Foon Tan {
24*cbd15b3fSLey Foon Tan 	set_pmd(pmd, __pmd((unsigned long)page_address(pte)));
25*cbd15b3fSLey Foon Tan }
26*cbd15b3fSLey Foon Tan #define pmd_pgtable(pmd) pmd_page(pmd)
27*cbd15b3fSLey Foon Tan 
28*cbd15b3fSLey Foon Tan /*
29*cbd15b3fSLey Foon Tan  * Initialize a new pmd table with invalid pointers.
30*cbd15b3fSLey Foon Tan  */
31*cbd15b3fSLey Foon Tan extern void pmd_init(unsigned long page, unsigned long pagetable);
32*cbd15b3fSLey Foon Tan 
33*cbd15b3fSLey Foon Tan extern pgd_t *pgd_alloc(struct mm_struct *mm);
34*cbd15b3fSLey Foon Tan 
35*cbd15b3fSLey Foon Tan static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
36*cbd15b3fSLey Foon Tan {
37*cbd15b3fSLey Foon Tan 	free_pages((unsigned long)pgd, PGD_ORDER);
38*cbd15b3fSLey Foon Tan }
39*cbd15b3fSLey Foon Tan 
40*cbd15b3fSLey Foon Tan static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
41*cbd15b3fSLey Foon Tan 	unsigned long address)
42*cbd15b3fSLey Foon Tan {
43*cbd15b3fSLey Foon Tan 	pte_t *pte;
44*cbd15b3fSLey Foon Tan 
45*cbd15b3fSLey Foon Tan 	pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO,
46*cbd15b3fSLey Foon Tan 					PTE_ORDER);
47*cbd15b3fSLey Foon Tan 
48*cbd15b3fSLey Foon Tan 	return pte;
49*cbd15b3fSLey Foon Tan }
50*cbd15b3fSLey Foon Tan 
51*cbd15b3fSLey Foon Tan static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
52*cbd15b3fSLey Foon Tan 	unsigned long address)
53*cbd15b3fSLey Foon Tan {
54*cbd15b3fSLey Foon Tan 	struct page *pte;
55*cbd15b3fSLey Foon Tan 
56*cbd15b3fSLey Foon Tan 	pte = alloc_pages(GFP_KERNEL | __GFP_REPEAT, PTE_ORDER);
57*cbd15b3fSLey Foon Tan 	if (pte) {
58*cbd15b3fSLey Foon Tan 		if (!pgtable_page_ctor(pte)) {
59*cbd15b3fSLey Foon Tan 			__free_page(pte);
60*cbd15b3fSLey Foon Tan 			return NULL;
61*cbd15b3fSLey Foon Tan 		}
62*cbd15b3fSLey Foon Tan 		clear_highpage(pte);
63*cbd15b3fSLey Foon Tan 	}
64*cbd15b3fSLey Foon Tan 	return pte;
65*cbd15b3fSLey Foon Tan }
66*cbd15b3fSLey Foon Tan 
67*cbd15b3fSLey Foon Tan static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
68*cbd15b3fSLey Foon Tan {
69*cbd15b3fSLey Foon Tan 	free_pages((unsigned long)pte, PTE_ORDER);
70*cbd15b3fSLey Foon Tan }
71*cbd15b3fSLey Foon Tan 
72*cbd15b3fSLey Foon Tan static inline void pte_free(struct mm_struct *mm, struct page *pte)
73*cbd15b3fSLey Foon Tan {
74*cbd15b3fSLey Foon Tan 	pgtable_page_dtor(pte);
75*cbd15b3fSLey Foon Tan 	__free_pages(pte, PTE_ORDER);
76*cbd15b3fSLey Foon Tan }
77*cbd15b3fSLey Foon Tan 
78*cbd15b3fSLey Foon Tan #define __pte_free_tlb(tlb, pte, addr)				\
79*cbd15b3fSLey Foon Tan 	do {							\
80*cbd15b3fSLey Foon Tan 		pgtable_page_dtor(pte);				\
81*cbd15b3fSLey Foon Tan 		tlb_remove_page((tlb), (pte));			\
82*cbd15b3fSLey Foon Tan 	} while (0)
83*cbd15b3fSLey Foon Tan 
84*cbd15b3fSLey Foon Tan #define check_pgt_cache()	do { } while (0)
85*cbd15b3fSLey Foon Tan 
86*cbd15b3fSLey Foon Tan #endif /* _ASM_NIOS2_PGALLOC_H */
87