Commit | Line | Data |
---|---|---|
047ea784 PM |
1 | #ifndef _ASM_POWERPC_PGALLOC_H |
2 | #define _ASM_POWERPC_PGALLOC_H | |
88ced031 | 3 | #ifdef __KERNEL__ |
047ea784 | 4 | |
0186f47e KG |
5 | #include <linux/mm.h> |
6 | ||
c7cc58a1 BH |
7 | #ifdef CONFIG_PPC_BOOK3E |
8 | extern void tlb_flush_pgtable(struct mmu_gather *tlb, unsigned long address); | |
9 | #else /* CONFIG_PPC_BOOK3E */ | |
10 | static inline void tlb_flush_pgtable(struct mmu_gather *tlb, | |
11 | unsigned long address) | |
12 | { | |
13 | } | |
14 | #endif /* !CONFIG_PPC_BOOK3E */ | |
15 | ||
0186f47e KG |
16 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) |
17 | { | |
18 | free_page((unsigned long)pte); | |
19 | } | |
20 | ||
21 | static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage) | |
22 | { | |
23 | pgtable_page_dtor(ptepage); | |
24 | __free_page(ptepage); | |
25 | } | |
26 | ||
f88df14b DG |
27 | #ifdef CONFIG_PPC64 |
28 | #include <asm/pgalloc-64.h> | |
047ea784 | 29 | #else |
f88df14b | 30 | #include <asm/pgalloc-32.h> |
3c726f8d | 31 | #endif |
1da177e4 | 32 | |
0186f47e | 33 | #ifdef CONFIG_SMP |
a0668cdc | 34 | extern void pgtable_free_tlb(struct mmu_gather *tlb, void *table, unsigned shift); |
c7cc58a1 BH |
35 | extern void pte_free_finish(void); |
36 | #else /* CONFIG_SMP */ | |
a0668cdc | 37 | static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, unsigned shift) |
c7cc58a1 | 38 | { |
a0668cdc | 39 | pgtable_free(table, shift); |
c7cc58a1 BH |
40 | } |
41 | static inline void pte_free_finish(void) { } | |
42 | #endif /* !CONFIG_SMP */ | |
0186f47e | 43 | |
c7cc58a1 BH |
44 | static inline void __pte_free_tlb(struct mmu_gather *tlb, struct page *ptepage, |
45 | unsigned long address) | |
46 | { | |
c7cc58a1 BH |
47 | tlb_flush_pgtable(tlb, address); |
48 | pgtable_page_dtor(ptepage); | |
a0668cdc | 49 | pgtable_free_tlb(tlb, page_address(ptepage), 0); |
c7cc58a1 | 50 | } |
0186f47e | 51 | |
88ced031 | 52 | #endif /* __KERNEL__ */ |
047ea784 | 53 | #endif /* _ASM_POWERPC_PGALLOC_H */ |