2005-04-17 02:20:36 +04: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/smp_lock.h>
# include <linux/slab.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>
2005-06-22 04:14:44 +04:00
pte_t * huge_pte_alloc ( struct mm_struct * mm , unsigned long addr )
2005-04-17 02:20:36 +04:00
{
pgd_t * pgd ;
2006-09-27 08:11:57 +04:00
pud_t * pud ;
2005-04-17 02:20:36 +04:00
pmd_t * pmd ;
pte_t * pte = NULL ;
pgd = pgd_offset ( mm , addr ) ;
if ( pgd ) {
2006-09-27 08:11:57 +04:00
pud = pud_alloc ( mm , pgd , addr ) ;
if ( pud ) {
pmd = pmd_alloc ( mm , pud , addr ) ;
if ( pmd )
pte = pte_alloc_map ( mm , pmd , addr ) ;
}
2005-04-17 02:20:36 +04:00
}
2006-09-27 08:11:57 +04:00
2005-04-17 02:20:36 +04:00
return pte ;
}
2005-06-22 04:14:44 +04:00
pte_t * huge_pte_offset ( struct mm_struct * mm , unsigned long addr )
2005-04-17 02:20:36 +04:00
{
pgd_t * pgd ;
2006-09-27 08:11:57 +04:00
pud_t * pud ;
2005-04-17 02:20:36 +04:00
pmd_t * pmd ;
pte_t * pte = NULL ;
pgd = pgd_offset ( mm , addr ) ;
if ( pgd ) {
2006-09-27 08:11:57 +04:00
pud = pud_offset ( pgd , addr ) ;
if ( pud ) {
pmd = pmd_offset ( pud , addr ) ;
if ( pmd )
pte = pte_offset_map ( pmd , addr ) ;
}
2005-06-22 04:14:44 +04:00
}
2005-04-17 02:20:36 +04:00
2006-09-27 08:11:57 +04:00
return pte ;
2005-04-17 02:20:36 +04:00
}
2006-12-07 07:32:03 +03:00
int huge_pmd_unshare ( struct mm_struct * mm , unsigned long * addr , pte_t * ptep )
{
return 0 ;
}
2005-04-17 02:20:36 +04: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 ;
}
struct page * follow_huge_pmd ( struct mm_struct * mm , unsigned long address ,
pmd_t * pmd , int write )
{
return NULL ;
}