]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - arch/sh/include/asm/pgalloc.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-jammy-kernel.git] / arch / sh / include / asm / pgalloc.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1da177e4
LT
2#ifndef __ASM_SH_PGALLOC_H
3#define __ASM_SH_PGALLOC_H
4
5f8c9908
PM
5#include <linux/quicklist.h>
6#include <asm/page.h>
7
0176bd3d 8#define QUICK_PT 0 /* Other page table pages that are zero on free */
5f8c9908 9
2a5eacca
MF
10extern pgd_t *pgd_alloc(struct mm_struct *);
11extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
12
782bb5a5 13#if PAGETABLE_LEVELS > 2
2a5eacca
MF
14extern void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd);
15extern pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address);
16extern void pmd_free(struct mm_struct *mm, pmd_t *pmd);
5d9b4b19 17#endif
b73c8063 18
99a596f9
SM
19static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
20 pte_t *pte)
21{
22 set_pmd(pmd, __pmd((unsigned long)pte));
23}
1da177e4
LT
24
25static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
2f569afd 26 pgtable_t pte)
1da177e4 27{
99a596f9 28 set_pmd(pmd, __pmd((unsigned long)page_address(pte)));
1da177e4 29}
2f569afd 30#define pmd_pgtable(pmd) pmd_page(pmd)
1da177e4
LT
31
32/*
33 * Allocate and free page tables.
34 */
1da177e4
LT
35static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
36 unsigned long address)
37{
32d6bd90 38 return quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL);
1da177e4
LT
39}
40
2f569afd
MS
41static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
42 unsigned long address)
1da177e4 43{
2f569afd
MS
44 struct page *page;
45 void *pg;
46
32d6bd90 47 pg = quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL);
2f569afd
MS
48 if (!pg)
49 return NULL;
50 page = virt_to_page(pg);
478cf8ca
KS
51 if (!pgtable_page_ctor(page)) {
52 quicklist_free(QUICK_PT, NULL, pg);
53 return NULL;
54 }
2f569afd 55 return page;
1da177e4
LT
56}
57
5e541973 58static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
1da177e4 59{
5f8c9908 60 quicklist_free(QUICK_PT, NULL, pte);
1da177e4
LT
61}
62
2f569afd 63static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
1da177e4 64{
2f569afd 65 pgtable_page_dtor(pte);
5f8c9908 66 quicklist_free_page(QUICK_PT, NULL, pte);
1da177e4
LT
67}
68
9e1b32ca 69#define __pte_free_tlb(tlb,pte,addr) \
2f569afd
MS
70do { \
71 pgtable_page_dtor(pte); \
72 tlb_remove_page((tlb), (pte)); \
73} while (0)
1da177e4 74
5f8c9908
PM
75static inline void check_pgt_cache(void)
76{
5f8c9908
PM
77 quicklist_trim(QUICK_PT, NULL, 25, 16);
78}
1da177e4 79
1da177e4 80#endif /* __ASM_SH_PGALLOC_H */