1 #ifndef _ASM_POWERPC_PGALLOC_64_H 2 #define _ASM_POWERPC_PGALLOC_64_H 3 /* 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9 10 #include <linux/slab.h> 11 #include <linux/cpumask.h> 12 #include <linux/percpu.h> 13 14 struct vmemmap_backing { 15 struct vmemmap_backing *list; 16 unsigned long phys; 17 unsigned long virt_addr; 18 }; 19 extern struct vmemmap_backing *vmemmap_list; 20 21 #define pgd_populate(MM, PGD, PUD) pgd_set(PGD, (unsigned long)PUD) 22 23 static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) 24 { 25 return kmem_cache_alloc(PGT_CACHE(PUD_INDEX_SIZE), 26 pgtable_gfp_flags(mm, GFP_KERNEL)); 27 } 28 29 static inline void pud_free(struct mm_struct *mm, pud_t *pud) 30 { 31 kmem_cache_free(PGT_CACHE(PUD_INDEX_SIZE), pud); 32 } 33 34 static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) 35 { 36 pud_set(pud, (unsigned long)pmd); 37 } 38 39 static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, 40 pte_t *pte) 41 { 42 pmd_set(pmd, (unsigned long)pte); 43 } 44 45 static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, 46 pgtable_t pte_page) 47 { 48 pmd_set(pmd, (unsigned long)pte_page); 49 } 50 51 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) 52 { 53 return kmem_cache_alloc(PGT_CACHE(PMD_CACHE_INDEX), 54 pgtable_gfp_flags(mm, GFP_KERNEL)); 55 } 56 57 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) 58 { 59 kmem_cache_free(PGT_CACHE(PMD_CACHE_INDEX), pmd); 60 } 61 62 #define __pmd_free_tlb(tlb, pmd, addr) \ 63 pgtable_free_tlb(tlb, pmd, PMD_CACHE_INDEX) 64 #define __pud_free_tlb(tlb, pud, addr) \ 65 pgtable_free_tlb(tlb, pud, PUD_INDEX_SIZE) 66 67 #endif /* _ASM_POWERPC_PGALLOC_64_H */ 68