diff options
Diffstat (limited to 'include/asm-powerpc/pgalloc-64.h')
-rw-r--r-- | include/asm-powerpc/pgalloc-64.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/include/asm-powerpc/pgalloc-64.h b/include/asm-powerpc/pgalloc-64.h index 94d0294341d6..5afae8593931 100644 --- a/include/asm-powerpc/pgalloc-64.h +++ b/include/asm-powerpc/pgalloc-64.h | |||
@@ -12,6 +12,10 @@ | |||
12 | #include <linux/cpumask.h> | 12 | #include <linux/cpumask.h> |
13 | #include <linux/percpu.h> | 13 | #include <linux/percpu.h> |
14 | 14 | ||
15 | #ifndef CONFIG_PPC_SUBPAGE_PROT | ||
16 | static inline void subpage_prot_free(pgd_t *pgd) {} | ||
17 | #endif | ||
18 | |||
15 | extern struct kmem_cache *pgtable_cache[]; | 19 | extern struct kmem_cache *pgtable_cache[]; |
16 | 20 | ||
17 | #define PGD_CACHE_NUM 0 | 21 | #define PGD_CACHE_NUM 0 |
@@ -25,8 +29,9 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) | |||
25 | return kmem_cache_alloc(pgtable_cache[PGD_CACHE_NUM], GFP_KERNEL); | 29 | return kmem_cache_alloc(pgtable_cache[PGD_CACHE_NUM], GFP_KERNEL); |
26 | } | 30 | } |
27 | 31 | ||
28 | static inline void pgd_free(pgd_t *pgd) | 32 | static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) |
29 | { | 33 | { |
34 | subpage_prot_free(pgd); | ||
30 | kmem_cache_free(pgtable_cache[PGD_CACHE_NUM], pgd); | 35 | kmem_cache_free(pgtable_cache[PGD_CACHE_NUM], pgd); |
31 | } | 36 | } |
32 | 37 | ||
@@ -40,7 +45,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) | |||
40 | GFP_KERNEL|__GFP_REPEAT); | 45 | GFP_KERNEL|__GFP_REPEAT); |
41 | } | 46 | } |
42 | 47 | ||
43 | static inline void pud_free(pud_t *pud) | 48 | static inline void pud_free(struct mm_struct *mm, pud_t *pud) |
44 | { | 49 | { |
45 | kmem_cache_free(pgtable_cache[PUD_CACHE_NUM], pud); | 50 | kmem_cache_free(pgtable_cache[PUD_CACHE_NUM], pud); |
46 | } | 51 | } |
@@ -76,7 +81,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) | |||
76 | GFP_KERNEL|__GFP_REPEAT); | 81 | GFP_KERNEL|__GFP_REPEAT); |
77 | } | 82 | } |
78 | 83 | ||
79 | static inline void pmd_free(pmd_t *pmd) | 84 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) |
80 | { | 85 | { |
81 | kmem_cache_free(pgtable_cache[PMD_CACHE_NUM], pmd); | 86 | kmem_cache_free(pgtable_cache[PMD_CACHE_NUM], pmd); |
82 | } | 87 | } |
@@ -94,12 +99,12 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm, | |||
94 | return pte ? virt_to_page(pte) : NULL; | 99 | return pte ? virt_to_page(pte) : NULL; |
95 | } | 100 | } |
96 | 101 | ||
97 | static inline void pte_free_kernel(pte_t *pte) | 102 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) |
98 | { | 103 | { |
99 | free_page((unsigned long)pte); | 104 | free_page((unsigned long)pte); |
100 | } | 105 | } |
101 | 106 | ||
102 | static inline void pte_free(struct page *ptepage) | 107 | static inline void pte_free(struct mm_struct *mm, struct page *ptepage) |
103 | { | 108 | { |
104 | __free_page(ptepage); | 109 | __free_page(ptepage); |
105 | } | 110 | } |