xref: /linux/arch/sh/mm/hugetlbpage.c (revision 874e2cc18972d30ecd4d572d1286fe9b594d309c)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * arch/sh/mm/hugetlbpage.c
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * SuperH HugeTLB page support.
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * Cloned from sparc64 by Paul Mundt.
81da177e4SLinus Torvalds  *
91da177e4SLinus Torvalds  * Copyright (C) 2002, 2003 David S. Miller (davem@redhat.com)
101da177e4SLinus Torvalds  */
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #include <linux/init.h>
131da177e4SLinus Torvalds #include <linux/fs.h>
141da177e4SLinus Torvalds #include <linux/mm.h>
151da177e4SLinus Torvalds #include <linux/hugetlb.h>
161da177e4SLinus Torvalds #include <linux/pagemap.h>
171da177e4SLinus Torvalds #include <linux/sysctl.h>
181da177e4SLinus Torvalds 
191da177e4SLinus Torvalds #include <asm/mman.h>
201da177e4SLinus Torvalds #include <asm/pgalloc.h>
211da177e4SLinus Torvalds #include <asm/tlb.h>
221da177e4SLinus Torvalds #include <asm/tlbflush.h>
231da177e4SLinus Torvalds #include <asm/cacheflush.h>
241da177e4SLinus Torvalds 
25a5516438SAndi Kleen pte_t *huge_pte_alloc(struct mm_struct *mm,
26a5516438SAndi Kleen 			unsigned long addr, unsigned long sz)
271da177e4SLinus Torvalds {
281da177e4SLinus Torvalds 	pgd_t *pgd;
29*874e2cc1SMike Rapoport 	p4d_t *p4d;
303f787fe2SPaul Mundt 	pud_t *pud;
311da177e4SLinus Torvalds 	pmd_t *pmd;
321da177e4SLinus Torvalds 	pte_t *pte = NULL;
331da177e4SLinus Torvalds 
341da177e4SLinus Torvalds 	pgd = pgd_offset(mm, addr);
351da177e4SLinus Torvalds 	if (pgd) {
36*874e2cc1SMike Rapoport 		p4d = p4d_alloc(mm, pgd, addr);
37*874e2cc1SMike Rapoport 		if (p4d) {
38*874e2cc1SMike Rapoport 			pud = pud_alloc(mm, p4d, addr);
393f787fe2SPaul Mundt 			if (pud) {
403f787fe2SPaul Mundt 				pmd = pmd_alloc(mm, pud, addr);
411da177e4SLinus Torvalds 				if (pmd)
423ed3a4f0SKirill A. Shutemov 					pte = pte_alloc_map(mm, pmd, addr);
431da177e4SLinus Torvalds 			}
443f787fe2SPaul Mundt 		}
45*874e2cc1SMike Rapoport 	}
463f787fe2SPaul Mundt 
471da177e4SLinus Torvalds 	return pte;
481da177e4SLinus Torvalds }
491da177e4SLinus Torvalds 
507868a208SPunit Agrawal pte_t *huge_pte_offset(struct mm_struct *mm,
517868a208SPunit Agrawal 		       unsigned long addr, unsigned long sz)
521da177e4SLinus Torvalds {
531da177e4SLinus Torvalds 	pgd_t *pgd;
54*874e2cc1SMike Rapoport 	p4d_t *p4d;
553f787fe2SPaul Mundt 	pud_t *pud;
561da177e4SLinus Torvalds 	pmd_t *pmd;
571da177e4SLinus Torvalds 	pte_t *pte = NULL;
581da177e4SLinus Torvalds 
591da177e4SLinus Torvalds 	pgd = pgd_offset(mm, addr);
601da177e4SLinus Torvalds 	if (pgd) {
61*874e2cc1SMike Rapoport 		p4d = p4d_offset(pgd, addr);
62*874e2cc1SMike Rapoport 		if (p4d) {
63*874e2cc1SMike Rapoport 			pud = pud_offset(p4d, addr);
643f787fe2SPaul Mundt 			if (pud) {
653f787fe2SPaul Mundt 				pmd = pmd_offset(pud, addr);
661da177e4SLinus Torvalds 				if (pmd)
671da177e4SLinus Torvalds 					pte = pte_offset_map(pmd, addr);
681da177e4SLinus Torvalds 			}
693f787fe2SPaul Mundt 		}
70*874e2cc1SMike Rapoport 	}
713f787fe2SPaul Mundt 
721da177e4SLinus Torvalds 	return pte;
731da177e4SLinus Torvalds }
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds int pmd_huge(pmd_t pmd)
761da177e4SLinus Torvalds {
771da177e4SLinus Torvalds 	return 0;
781da177e4SLinus Torvalds }
791da177e4SLinus Torvalds 
80ceb86879SAndi Kleen int pud_huge(pud_t pud)
81ceb86879SAndi Kleen {
82ceb86879SAndi Kleen 	return 0;
83ceb86879SAndi Kleen }
84