blob: d770da3f8b6fb2adcc43f6e3bda134b5baa4ef68 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __ASM_SH_PGALLOC_H
3#define __ASM_SH_PGALLOC_H
4
5#include <asm/page.h>
6#include <asm-generic/pgalloc.h>
7
8extern pgd_t *pgd_alloc(struct mm_struct *);
9extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
10
11#if PAGETABLE_LEVELS > 2
12extern void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd);
13extern pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address);
14extern void pmd_free(struct mm_struct *mm, pmd_t *pmd);
15#define __pmd_free_tlb(tlb, pmdp, addr) pmd_free((tlb)->mm, (pmdp))
16#endif
17
18static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
19 pte_t *pte)
20{
21 set_pmd(pmd, __pmd((unsigned long)pte));
22}
23
24static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
25 pgtable_t pte)
26{
27 set_pmd(pmd, __pmd((unsigned long)page_address(pte)));
28}
29#define pmd_pgtable(pmd) pmd_page(pmd)
30
31#define __pte_free_tlb(tlb,pte,addr) \
32do { \
33 pgtable_pte_page_dtor(pte); \
34 tlb_remove_page((tlb), (pte)); \
35} while (0)
36
37#endif /* __ASM_SH_PGALLOC_H */