2005-04-16 15:20:36 -07:00
/*
* arch / sh / mm / hugetlbpage . c
*
* SuperH HugeTLB page support .
*
* Cloned from sparc64 by Paul Mundt .
*
* Copyright ( C ) 2002 , 2003 David S . Miller ( davem @ redhat . com )
*/
# include <linux/init.h>
# include <linux/fs.h>
# include <linux/mm.h>
# include <linux/hugetlb.h>
# include <linux/pagemap.h>
# include <linux/sysctl.h>
# include <asm/mman.h>
# include <asm/pgalloc.h>
# include <asm/tlb.h>
# include <asm/tlbflush.h>
# include <asm/cacheflush.h>
2008-07-23 21:27:41 -07:00
pte_t * huge_pte_alloc ( struct mm_struct * mm ,
unsigned long addr , unsigned long sz )
2005-04-16 15:20:36 -07:00
{
pgd_t * pgd ;
2006-09-27 13:11:57 +09:00
pud_t * pud ;
2005-04-16 15:20:36 -07:00
pmd_t * pmd ;
pte_t * pte = NULL ;
pgd = pgd_offset ( mm , addr ) ;
if ( pgd ) {
2006-09-27 13:11:57 +09:00
pud = pud_alloc ( mm , pgd , addr ) ;
if ( pud ) {
pmd = pmd_alloc ( mm , pud , addr ) ;
if ( pmd )
2011-01-13 15:46:43 -08:00
pte = pte_alloc_map ( mm , NULL , pmd , addr ) ;
2006-09-27 13:11:57 +09:00
}
2005-04-16 15:20:36 -07:00
}
2006-09-27 13:11:57 +09:00
2005-04-16 15:20:36 -07:00
return pte ;
}
2005-06-21 17:14:44 -07:00
pte_t * huge_pte_offset ( struct mm_struct * mm , unsigned long addr )
2005-04-16 15:20:36 -07:00
{
pgd_t * pgd ;
2006-09-27 13:11:57 +09:00
pud_t * pud ;
2005-04-16 15:20:36 -07:00
pmd_t * pmd ;
pte_t * pte = NULL ;
pgd = pgd_offset ( mm , addr ) ;
if ( pgd ) {
2006-09-27 13:11:57 +09:00
pud = pud_offset ( pgd , addr ) ;
if ( pud ) {
pmd = pmd_offset ( pud , addr ) ;
if ( pmd )
pte = pte_offset_map ( pmd , addr ) ;
}
2005-06-21 17:14:44 -07:00
}
2005-04-16 15:20:36 -07:00
2006-09-27 13:11:57 +09:00
return pte ;
2005-04-16 15:20:36 -07:00
}
2006-12-06 20:32:03 -08:00
int huge_pmd_unshare ( struct mm_struct * mm , unsigned long * addr , pte_t * ptep )
{
return 0 ;
}
2005-04-16 15:20:36 -07:00
struct page * follow_huge_addr ( struct mm_struct * mm ,
unsigned long address , int write )
{
return ERR_PTR ( - EINVAL ) ;
}
int pmd_huge ( pmd_t pmd )
{
return 0 ;
}
2008-07-23 21:27:50 -07:00
int pud_huge ( pud_t pud )
{
return 0 ;
}
2005-04-16 15:20:36 -07:00
struct page * follow_huge_pmd ( struct mm_struct * mm , unsigned long address ,
pmd_t * pmd , int write )
{
return NULL ;
}