/arch/sparc/include/asm/pgalloc_64.h
C++ Header | 84 lines | 65 code | 18 blank | 1 comment | 1 complexity | eb6e6f98023976f7a711f6dc39c21696 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
1#ifndef _SPARC64_PGALLOC_H 2#define _SPARC64_PGALLOC_H 3 4#include <linux/kernel.h> 5#include <linux/sched.h> 6#include <linux/mm.h> 7#include <linux/slab.h> 8#include <linux/quicklist.h> 9 10#include <asm/spitfire.h> 11#include <asm/cpudata.h> 12#include <asm/cacheflush.h> 13#include <asm/page.h> 14 15/* Page table allocation/freeing. */ 16 17static inline pgd_t *pgd_alloc(struct mm_struct *mm) 18{ 19 return quicklist_alloc(0, GFP_KERNEL, NULL); 20} 21 22static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) 23{ 24 quicklist_free(0, NULL, pgd); 25} 26 27#define pud_populate(MM, PUD, PMD) pud_set(PUD, PMD) 28 29static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) 30{ 31 return quicklist_alloc(0, GFP_KERNEL, NULL); 32} 33 34static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) 35{ 36 quicklist_free(0, NULL, pmd); 37} 38 39static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 40 unsigned long address) 41{ 42 return quicklist_alloc(0, GFP_KERNEL, NULL); 43} 44 45static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 46 unsigned long address) 47{ 48 struct page *page; 49 void *pg; 50 51 pg = quicklist_alloc(0, GFP_KERNEL, NULL); 52 if (!pg) 53 return NULL; 54 page = virt_to_page(pg); 55 pgtable_page_ctor(page); 56 return page; 57} 58 59static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) 60{ 61 quicklist_free(0, NULL, pte); 62} 63 64static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage) 65{ 66 pgtable_page_dtor(ptepage); 67 quicklist_free_page(0, NULL, ptepage); 68} 69 70 71#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(PMD, PTE) 72#define pmd_populate(MM,PMD,PTE_PAGE) \ 73 pmd_populate_kernel(MM,PMD,page_address(PTE_PAGE)) 74#define pmd_pgtable(pmd) pmd_page(pmd) 75 76static inline void check_pgt_cache(void) 77{ 78 quicklist_trim(0, NULL, 25, 16); 79} 80 81#define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte) 82#define __pmd_free_tlb(tlb, pmd, addr) pmd_free((tlb)->mm, pmd) 83 84#endif /* _SPARC64_PGALLOC_H */