45 lines
980 B
C
45 lines
980 B
C
|
// SPDX-License-Identifier: GPL-2.0
|
||
|
/*
|
||
|
* IA-32 Huge TLB Page Support for Kernel.
|
||
|
*
|
||
|
* Copyright (C) 2002, Rohit Seth <rohit.seth@intel.com>
|
||
|
*/
|
||
|
|
||
|
#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
|