Merge commit 'jwb/next' into next
[deliverable/linux.git] / arch / powerpc / include / asm / pgalloc.h
CommitLineData
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
7static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
8{
9 free_page((unsigned long)pte);
10}
11
12static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
13{
14 pgtable_page_dtor(ptepage);
15 __free_page(ptepage);
16}
17
18typedef struct pgtable_free {
19 unsigned long val;
20} pgtable_free_t;
21
22#define PGF_CACHENUM_MASK 0x7
23
24static inline pgtable_free_t pgtable_free_cache(void *p, int cachenum,
25 unsigned long mask)
26{
27 BUG_ON(cachenum > PGF_CACHENUM_MASK);
28
29 return (pgtable_free_t){.val = ((unsigned long) p & ~mask) | cachenum};
30}
31
f88df14b
DG
32#ifdef CONFIG_PPC64
33#include <asm/pgalloc-64.h>
047ea784 34#else
f88df14b 35#include <asm/pgalloc-32.h>
3c726f8d 36#endif
1da177e4 37
0186f47e
KG
38extern void pgtable_free_tlb(struct mmu_gather *tlb, pgtable_free_t pgf);
39
40#ifdef CONFIG_SMP
41#define __pte_free_tlb(tlb,ptepage) \
42do { \
43 pgtable_page_dtor(ptepage); \
44 pgtable_free_tlb(tlb, pgtable_free_cache(page_address(ptepage), \
45 PTE_NONCACHE_NUM, PTE_TABLE_SIZE-1)); \
46} while (0)
47#else
48#define __pte_free_tlb(tlb, pte) pte_free((tlb)->mm, (pte))
49#endif
50
51
88ced031 52#endif /* __KERNEL__ */
047ea784 53#endif /* _ASM_POWERPC_PGALLOC_H */
This page took 0.381285 seconds and 5 git commands to generate.