| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * IA-32 Huge TLB Page Support for Kernel. |
| * |
| * Copyright (C) 2002, Rohit Seth <[email protected]> |
| */ |
| |
| #include <linux/init.h> |
| #include <linux/fs.h> |
| #include <linux/mm.h> |
| #include <linux/sched/mm.h> |
| #include <linux/hugetlb.h> |
| #include <linux/pagemap.h> |
| #include <linux/err.h> |
| #include <linux/sysctl.h> |
| #include <linux/compat.h> |
| #include <asm/mman.h> |
| #include <asm/tlb.h> |
| #include <asm/tlbflush.h> |
| #include <asm/elf.h> |
| |
| |
| #ifdef CONFIG_X86_64 |
| bool __init arch_hugetlb_valid_size(unsigned long size) |
| { |
| if (size == PMD_SIZE) |
| return true; |
| else if (size == PUD_SIZE && boot_cpu_has(X86_FEATURE_GBPAGES)) |
| return true; |
| else |
| return false; |
| } |
| |
| #ifdef CONFIG_CONTIG_ALLOC |
| static __init int gigantic_pages_init(void) |
| { |
| /* With compaction or CMA we can allocate gigantic pages at runtime */ |
| if (boot_cpu_has(X86_FEATURE_GBPAGES)) |
| hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); |
| return 0; |
| } |
| arch_initcall(gigantic_pages_init); |
| #endif |
| #endif |