18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_POWERPC_PGALLOC_64_H 38c2ecf20Sopenharmony_ci#define _ASM_POWERPC_PGALLOC_64_H 48c2ecf20Sopenharmony_ci/* 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/slab.h> 88c2ecf20Sopenharmony_ci#include <linux/cpumask.h> 98c2ecf20Sopenharmony_ci#include <linux/percpu.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistruct vmemmap_backing { 128c2ecf20Sopenharmony_ci struct vmemmap_backing *list; 138c2ecf20Sopenharmony_ci unsigned long phys; 148c2ecf20Sopenharmony_ci unsigned long virt_addr; 158c2ecf20Sopenharmony_ci}; 168c2ecf20Sopenharmony_ciextern struct vmemmap_backing *vmemmap_list; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#define p4d_populate(MM, P4D, PUD) p4d_set(P4D, (unsigned long)PUD) 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistatic inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) 218c2ecf20Sopenharmony_ci{ 228c2ecf20Sopenharmony_ci return kmem_cache_alloc(PGT_CACHE(PUD_INDEX_SIZE), 238c2ecf20Sopenharmony_ci pgtable_gfp_flags(mm, GFP_KERNEL)); 248c2ecf20Sopenharmony_ci} 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistatic inline void pud_free(struct mm_struct *mm, pud_t *pud) 278c2ecf20Sopenharmony_ci{ 288c2ecf20Sopenharmony_ci kmem_cache_free(PGT_CACHE(PUD_INDEX_SIZE), pud); 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistatic inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) 328c2ecf20Sopenharmony_ci{ 338c2ecf20Sopenharmony_ci pud_set(pud, (unsigned long)pmd); 348c2ecf20Sopenharmony_ci} 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistatic inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, 378c2ecf20Sopenharmony_ci pte_t *pte) 388c2ecf20Sopenharmony_ci{ 398c2ecf20Sopenharmony_ci pmd_set(pmd, (unsigned long)pte); 408c2ecf20Sopenharmony_ci} 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cistatic inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, 438c2ecf20Sopenharmony_ci pgtable_t pte_page) 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci pmd_set(pmd, (unsigned long)pte_page); 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_cistatic inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci return kmem_cache_alloc(PGT_CACHE(PMD_CACHE_INDEX), 518c2ecf20Sopenharmony_ci pgtable_gfp_flags(mm, GFP_KERNEL)); 528c2ecf20Sopenharmony_ci} 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistatic inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) 558c2ecf20Sopenharmony_ci{ 568c2ecf20Sopenharmony_ci kmem_cache_free(PGT_CACHE(PMD_CACHE_INDEX), pmd); 578c2ecf20Sopenharmony_ci} 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci#define __pmd_free_tlb(tlb, pmd, addr) \ 608c2ecf20Sopenharmony_ci pgtable_free_tlb(tlb, pmd, PMD_CACHE_INDEX) 618c2ecf20Sopenharmony_ci#define __pud_free_tlb(tlb, pud, addr) \ 628c2ecf20Sopenharmony_ci pgtable_free_tlb(tlb, pud, PUD_INDEX_SIZE) 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci#endif /* _ASM_POWERPC_PGALLOC_64_H */ 65