// SPDX-License-Identifier: GPL-2.0 #include #include int pud_huge(pud_t pud) { return pud_leaf(pud); } int pmd_huge(pmd_t pmd) { return pmd_leaf(pmd); } static __init int setup_hugepagesz(char *opt) { unsigned long ps = memparse(opt, &opt); if (ps == HPAGE_SIZE) { hugetlb_add_hstate(HPAGE_SHIFT - PAGE_SHIFT); } else if (IS_ENABLED(CONFIG_64BIT) && ps == PUD_SIZE) { hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); } else { hugetlb_bad_size(); pr_err("hugepagesz: Unsupported page size %lu M\n", ps >> 20); return 0; } return 1; } __setup("hugepagesz=", setup_hugepagesz); #ifdef CONFIG_CONTIG_ALLOC static __init int gigantic_pages_init(void) { /* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */ if (IS_ENABLED(CONFIG_64BIT) && !size_to_hstate(1UL << PUD_SHIFT)) hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); return 0; } arch_initcall(gigantic_pages_init); #endif