162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci#ifndef _ASM_POWERPC_PGALLOC_64_H 362306a36Sopenharmony_ci#define _ASM_POWERPC_PGALLOC_64_H 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/slab.h> 862306a36Sopenharmony_ci#include <linux/cpumask.h> 962306a36Sopenharmony_ci#include <linux/percpu.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_cistruct vmemmap_backing { 1262306a36Sopenharmony_ci struct vmemmap_backing *list; 1362306a36Sopenharmony_ci unsigned long phys; 1462306a36Sopenharmony_ci unsigned long virt_addr; 1562306a36Sopenharmony_ci}; 1662306a36Sopenharmony_ciextern struct vmemmap_backing *vmemmap_list; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistatic inline void p4d_populate(struct mm_struct *mm, p4d_t *p4d, pud_t *pud) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci p4d_set(p4d, (unsigned long)pud); 2162306a36Sopenharmony_ci} 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) 2462306a36Sopenharmony_ci{ 2562306a36Sopenharmony_ci return kmem_cache_alloc(PGT_CACHE(PUD_INDEX_SIZE), 2662306a36Sopenharmony_ci pgtable_gfp_flags(mm, GFP_KERNEL)); 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistatic inline void pud_free(struct mm_struct *mm, pud_t *pud) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci kmem_cache_free(PGT_CACHE(PUD_INDEX_SIZE), pud); 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci pud_set(pud, (unsigned long)pmd); 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistatic inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, 4062306a36Sopenharmony_ci pte_t *pte) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci pmd_set(pmd, (unsigned long)pte); 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistatic inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, 4662306a36Sopenharmony_ci pgtable_t pte_page) 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci pmd_set(pmd, (unsigned long)pte_page); 4962306a36Sopenharmony_ci} 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistatic inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) 5262306a36Sopenharmony_ci{ 5362306a36Sopenharmony_ci return kmem_cache_alloc(PGT_CACHE(PMD_CACHE_INDEX), 5462306a36Sopenharmony_ci pgtable_gfp_flags(mm, GFP_KERNEL)); 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistatic inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) 5862306a36Sopenharmony_ci{ 5962306a36Sopenharmony_ci kmem_cache_free(PGT_CACHE(PMD_CACHE_INDEX), pmd); 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define __pmd_free_tlb(tlb, pmd, addr) \ 6362306a36Sopenharmony_ci pgtable_free_tlb(tlb, pmd, PMD_CACHE_INDEX) 6462306a36Sopenharmony_ci#define __pud_free_tlb(tlb, pud, addr) \ 6562306a36Sopenharmony_ci pgtable_free_tlb(tlb, pud, PUD_INDEX_SIZE) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#endif /* _ASM_POWERPC_PGALLOC_64_H */ 68