diff options
| author | Anton Blanchard <anton@samba.org> | 2003-09-20 12:55:30 +1000 |
|---|---|---|
| committer | Anton Blanchard <anton@samba.org> | 2003-09-20 12:55:30 +1000 |
| commit | fd21015e8cbaa88e5597ab8eaae95f911ab266d5 (patch) | |
| tree | 055c29b27edb0b7a18ca070dbd00c5bde9f84385 /include | |
| parent | 3244d5cc5ee7c5f290fd87c5e5b764a193b63dc0 (diff) | |
ppc64: slabify ppc64 pagetables, from Bill Irwin
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-ppc64/pgalloc.h | 28 | ||||
| -rw-r--r-- | include/asm-ppc64/pgtable.h | 5 |
2 files changed, 10 insertions, 23 deletions
diff --git a/include/asm-ppc64/pgalloc.h b/include/asm-ppc64/pgalloc.h index 9376b791bee7..23b0cde55e4e 100644 --- a/include/asm-ppc64/pgalloc.h +++ b/include/asm-ppc64/pgalloc.h @@ -2,8 +2,11 @@ #define _PPC64_PGALLOC_H #include <linux/mm.h> +#include <linux/slab.h> #include <asm/processor.h> +extern kmem_cache_t *zero_cache; + /* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -14,16 +17,13 @@ static inline pgd_t * pgd_alloc(struct mm_struct *mm) { - pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL); - if (pgd != NULL) - clear_page(pgd); - return pgd; + return kmem_cache_alloc(zero_cache, GFP_KERNEL); } static inline void pgd_free(pgd_t *pgd) { - free_page((unsigned long)pgd); + kmem_cache_free(zero_cache, pgd); } #define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD) @@ -31,18 +31,13 @@ pgd_free(pgd_t *pgd) static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long addr) { - pmd_t *pmd; - - pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); - if (pmd) - clear_page(pmd); - return pmd; + return kmem_cache_alloc(zero_cache, GFP_KERNEL|__GFP_REPEAT); } static inline void pmd_free(pmd_t *pmd) { - free_page((unsigned long)pmd); + kmem_cache_free(zero_cache, pmd); } #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd) @@ -54,12 +49,7 @@ pmd_free(pmd_t *pmd) static inline pte_t * pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) { - pte_t *pte; - - pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); - if (pte) - clear_page(pte); - return pte; + return kmem_cache_alloc(zero_cache, GFP_KERNEL|__GFP_REPEAT); } static inline struct page * @@ -76,7 +66,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address) static inline void pte_free_kernel(pte_t *pte) { - free_page((unsigned long)pte); + kmem_cache_free(zero_cache, pte); } #define pte_free(pte_page) pte_free_kernel(page_address(pte_page)) diff --git a/include/asm-ppc64/pgtable.h b/include/asm-ppc64/pgtable.h index 49a90176473a..ce5e9afe0390 100644 --- a/include/asm-ppc64/pgtable.h +++ b/include/asm-ppc64/pgtable.h @@ -395,10 +395,7 @@ extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t); #define io_remap_page_range remap_page_range -/* - * No page table caches to initialise - */ -#define pgtable_cache_init() do { } while (0) +void pgtable_cache_init(void); extern void hpte_init_pSeries(void); extern void hpte_init_iSeries(void); |
