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