2005-11-19 20:17:32 +11:00
# ifndef _ASM_POWERPC_PGALLOC_H
# define _ASM_POWERPC_PGALLOC_H
2005-12-16 22:43:46 +01:00
# ifdef __KERNEL__
2005-11-19 20:17:32 +11:00
2008-11-19 12:50:04 +00:00
# include <linux/mm.h>
2009-07-23 23:15:28 +00:00
# ifdef CONFIG_PPC_BOOK3E
extern void tlb_flush_pgtable ( struct mmu_gather * tlb , unsigned long address ) ;
# else /* CONFIG_PPC_BOOK3E */
static inline void tlb_flush_pgtable ( struct mmu_gather * tlb ,
unsigned long address )
{
}
# endif /* !CONFIG_PPC_BOOK3E */
2008-11-19 12:50:04 +00:00
static inline void pte_free_kernel ( struct mm_struct * mm , pte_t * pte )
{
free_page ( ( unsigned long ) pte ) ;
}
static inline void pte_free ( struct mm_struct * mm , pgtable_t ptepage )
{
pgtable_page_dtor ( ptepage ) ;
__free_page ( ptepage ) ;
}
2007-04-30 16:30:56 +10:00
# ifdef CONFIG_PPC64
# include <asm/pgalloc-64.h>
2005-11-19 20:17:32 +11:00
# else
2007-04-30 16:30:56 +10:00
# include <asm/pgalloc-32.h>
2005-11-07 11:06:55 +11:00
# endif
2005-04-16 15:20:36 -07:00
2008-11-19 12:50:04 +00:00
# ifdef CONFIG_SMP
2009-10-28 16:27:18 +00:00
extern void pgtable_free_tlb ( struct mmu_gather * tlb , void * table , unsigned shift ) ;
2009-07-23 23:15:28 +00:00
extern void pte_free_finish ( void ) ;
# else /* CONFIG_SMP */
2009-10-28 16:27:18 +00:00
static inline void pgtable_free_tlb ( struct mmu_gather * tlb , void * table , unsigned shift )
2009-07-23 23:15:28 +00:00
{
2009-10-28 16:27:18 +00:00
pgtable_free ( table , shift ) ;
2009-07-23 23:15:28 +00:00
}
static inline void pte_free_finish ( void ) { }
# endif /* !CONFIG_SMP */
2008-11-19 12:50:04 +00:00
2009-07-23 23:15:28 +00:00
static inline void __pte_free_tlb ( struct mmu_gather * tlb , struct page * ptepage ,
unsigned long address )
{
tlb_flush_pgtable ( tlb , address ) ;
pgtable_page_dtor ( ptepage ) ;
2009-10-28 16:27:18 +00:00
pgtable_free_tlb ( tlb , page_address ( ptepage ) , 0 ) ;
2009-07-23 23:15:28 +00:00
}
2008-11-19 12:50:04 +00:00
2005-12-16 22:43:46 +01:00
# endif /* __KERNEL__ */
2005-11-19 20:17:32 +11:00
# endif /* _ASM_POWERPC_PGALLOC_H */