Linux Audio

Check our new training course

Loading...
v5.9
 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
25#ifdef CONFIG_CONTIG_ALLOC
26static __init int gigantic_pages_init(void)
27{
28	/* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */
29	if (IS_ENABLED(CONFIG_64BIT))
30		hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
31	return 0;
32}
33arch_initcall(gigantic_pages_init);
34#endif
v5.4
 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_present(pud) &&
 8		(pud_val(pud) & (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC));
 9}
10
11int pmd_huge(pmd_t pmd)
12{
13	return pmd_present(pmd) &&
14		(pmd_val(pmd) & (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC));
15}
16
17static __init int setup_hugepagesz(char *opt)
18{
19	unsigned long ps = memparse(opt, &opt);
20
21	if (ps == HPAGE_SIZE) {
22		hugetlb_add_hstate(HPAGE_SHIFT - PAGE_SHIFT);
23	} else if (IS_ENABLED(CONFIG_64BIT) && ps == PUD_SIZE) {
24		hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
25	} else {
26		hugetlb_bad_size();
27		pr_err("hugepagesz: Unsupported page size %lu M\n", ps >> 20);
28		return 0;
29	}
30
31	return 1;
32}
33__setup("hugepagesz=", setup_hugepagesz);
34
35#ifdef CONFIG_CONTIG_ALLOC
36static __init int gigantic_pages_init(void)
37{
38	/* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */
39	if (IS_ENABLED(CONFIG_64BIT) && !size_to_hstate(1UL << PUD_SHIFT))
40		hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
41	return 0;
42}
43arch_initcall(gigantic_pages_init);
44#endif