hugetlbpage.c (16ba7e312045cd5d32fba0156312b4303f200787) hugetlbpage.c (ae94da898133947c2d1f005da10838478e4548db)
1// SPDX-License-Identifier: GPL-2.0
2#include <linux/hugetlb.h>
3#include <linux/err.h>
4
5int pud_huge(pud_t pud)
6{
7 return pud_leaf(pud);
8}
9
10int pmd_huge(pmd_t pmd)
11{
12 return pmd_leaf(pmd);
13}
14
1// SPDX-License-Identifier: GPL-2.0
2#include <linux/hugetlb.h>
3#include <linux/err.h>
4
5int pud_huge(pud_t pud)
6{
7 return pud_leaf(pud);
8}
9
10int pmd_huge(pmd_t pmd)
11{
12 return pmd_leaf(pmd);
13}
14
15bool __init arch_hugetlb_valid_size(unsigned long size)
16{
17 if (size == HPAGE_SIZE)
18 return true;
19 else if (IS_ENABLED(CONFIG_64BIT) && size == PUD_SIZE)
20 return true;
21 else
22 return false;
23}
24
15static __init int setup_hugepagesz(char *opt)
16{
17 unsigned long ps = memparse(opt, &opt);
18
25static __init int setup_hugepagesz(char *opt)
26{
27 unsigned long ps = memparse(opt, &opt);
28
19 if (ps == HPAGE_SIZE) {
20 hugetlb_add_hstate(HPAGE_SHIFT - PAGE_SHIFT);
21 } else if (IS_ENABLED(CONFIG_64BIT) && ps == PUD_SIZE) {
22 hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
23 } else {
24 hugetlb_bad_size();
25 pr_err("hugepagesz: Unsupported page size %lu M\n", ps >> 20);
26 return 0;
29 if (arch_hugetlb_valid_size(ps)) {
30 hugetlb_add_hstate(ilog2(ps) - PAGE_SHIFT);
31 return 1;
27 }
28
32 }
33
29 return 1;
34 hugetlb_bad_size();
35 pr_err("hugepagesz: Unsupported page size %lu M\n", ps >> 20);
36 return 0;
37
30}
31__setup("hugepagesz=", setup_hugepagesz);
32
33#ifdef CONFIG_CONTIG_ALLOC
34static __init int gigantic_pages_init(void)
35{
36 /* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */
37 if (IS_ENABLED(CONFIG_64BIT) && !size_to_hstate(1UL << PUD_SHIFT))
38 hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
39 return 0;
40}
41arch_initcall(gigantic_pages_init);
42#endif
38}
39__setup("hugepagesz=", setup_hugepagesz);
40
41#ifdef CONFIG_CONTIG_ALLOC
42static __init int gigantic_pages_init(void)
43{
44 /* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */
45 if (IS_ENABLED(CONFIG_64BIT) && !size_to_hstate(1UL << PUD_SHIFT))
46 hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
47 return 0;
48}
49arch_initcall(gigantic_pages_init);
50#endif