xref: /OK3568_Linux_fs/kernel/arch/riscv/mm/hugetlbpage.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include <linux/hugetlb.h>
3*4882a593Smuzhiyun #include <linux/err.h>
4*4882a593Smuzhiyun 
pud_huge(pud_t pud)5*4882a593Smuzhiyun int pud_huge(pud_t pud)
6*4882a593Smuzhiyun {
7*4882a593Smuzhiyun 	return pud_leaf(pud);
8*4882a593Smuzhiyun }
9*4882a593Smuzhiyun 
pmd_huge(pmd_t pmd)10*4882a593Smuzhiyun int pmd_huge(pmd_t pmd)
11*4882a593Smuzhiyun {
12*4882a593Smuzhiyun 	return pmd_leaf(pmd);
13*4882a593Smuzhiyun }
14*4882a593Smuzhiyun 
arch_hugetlb_valid_size(unsigned long size)15*4882a593Smuzhiyun bool __init arch_hugetlb_valid_size(unsigned long size)
16*4882a593Smuzhiyun {
17*4882a593Smuzhiyun 	if (size == HPAGE_SIZE)
18*4882a593Smuzhiyun 		return true;
19*4882a593Smuzhiyun 	else if (IS_ENABLED(CONFIG_64BIT) && size == PUD_SIZE)
20*4882a593Smuzhiyun 		return true;
21*4882a593Smuzhiyun 	else
22*4882a593Smuzhiyun 		return false;
23*4882a593Smuzhiyun }
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #ifdef CONFIG_CONTIG_ALLOC
gigantic_pages_init(void)26*4882a593Smuzhiyun static __init int gigantic_pages_init(void)
27*4882a593Smuzhiyun {
28*4882a593Smuzhiyun 	/* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */
29*4882a593Smuzhiyun 	if (IS_ENABLED(CONFIG_64BIT))
30*4882a593Smuzhiyun 		hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
31*4882a593Smuzhiyun 	return 0;
32*4882a593Smuzhiyun }
33*4882a593Smuzhiyun arch_initcall(gigantic_pages_init);
34*4882a593Smuzhiyun #endif
35