summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2003-09-20 12:55:30 +1000
committerAnton Blanchard <anton@samba.org>2003-09-20 12:55:30 +1000
commitfd21015e8cbaa88e5597ab8eaae95f911ab266d5 (patch)
tree055c29b27edb0b7a18ca070dbd00c5bde9f84385 /include
parent3244d5cc5ee7c5f290fd87c5e5b764a193b63dc0 (diff)
ppc64: slabify ppc64 pagetables, from Bill Irwin
Diffstat (limited to 'include')
-rw-r--r--include/asm-ppc64/pgalloc.h28
-rw-r--r--include/asm-ppc64/pgtable.h5
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);