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