| .. | .. |
|---|
| 17 | 17 | #include <asm/mman.h> |
|---|
| 18 | 18 | #include <asm/tlb.h> |
|---|
| 19 | 19 | #include <asm/tlbflush.h> |
|---|
| 20 | | -#include <asm/pgalloc.h> |
|---|
| 21 | 20 | #include <asm/elf.h> |
|---|
| 22 | | -#include <asm/mpx.h> |
|---|
| 23 | 21 | |
|---|
| 24 | 22 | #if 0 /* This is just for testing */ |
|---|
| 25 | 23 | struct page * |
|---|
| .. | .. |
|---|
| 92 | 90 | * If hint address is above DEFAULT_MAP_WINDOW, look for unmapped area |
|---|
| 93 | 91 | * in the full address space. |
|---|
| 94 | 92 | */ |
|---|
| 95 | | - info.high_limit = in_compat_syscall() ? |
|---|
| 93 | + info.high_limit = in_32bit_syscall() ? |
|---|
| 96 | 94 | task_size_32bit() : task_size_64bit(addr > DEFAULT_MAP_WINDOW); |
|---|
| 97 | 95 | |
|---|
| 98 | 96 | info.align_mask = PAGE_MASK & ~huge_page_mask(h); |
|---|
| .. | .. |
|---|
| 116 | 114 | * If hint address is above DEFAULT_MAP_WINDOW, look for unmapped area |
|---|
| 117 | 115 | * in the full address space. |
|---|
| 118 | 116 | */ |
|---|
| 119 | | - if (addr > DEFAULT_MAP_WINDOW && !in_compat_syscall()) |
|---|
| 117 | + if (addr > DEFAULT_MAP_WINDOW && !in_32bit_syscall()) |
|---|
| 120 | 118 | info.high_limit += TASK_SIZE_MAX - DEFAULT_MAP_WINDOW; |
|---|
| 121 | 119 | |
|---|
| 122 | 120 | info.align_mask = PAGE_MASK & ~huge_page_mask(h); |
|---|
| .. | .. |
|---|
| 151 | 149 | if (len & ~huge_page_mask(h)) |
|---|
| 152 | 150 | return -EINVAL; |
|---|
| 153 | 151 | |
|---|
| 154 | | - addr = mpx_unmapped_area_check(addr, len, flags); |
|---|
| 155 | | - if (IS_ERR_VALUE(addr)) |
|---|
| 156 | | - return addr; |
|---|
| 157 | | - |
|---|
| 158 | 152 | if (len > TASK_SIZE) |
|---|
| 159 | 153 | return -ENOMEM; |
|---|
| 160 | 154 | |
|---|
| .. | .. |
|---|
| 186 | 180 | #endif /* CONFIG_HUGETLB_PAGE */ |
|---|
| 187 | 181 | |
|---|
| 188 | 182 | #ifdef CONFIG_X86_64 |
|---|
| 189 | | -static __init int setup_hugepagesz(char *opt) |
|---|
| 183 | +bool __init arch_hugetlb_valid_size(unsigned long size) |
|---|
| 190 | 184 | { |
|---|
| 191 | | - unsigned long ps = memparse(opt, &opt); |
|---|
| 192 | | - if (ps == PMD_SIZE) { |
|---|
| 193 | | - hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT); |
|---|
| 194 | | - } else if (ps == PUD_SIZE && boot_cpu_has(X86_FEATURE_GBPAGES)) { |
|---|
| 195 | | - hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); |
|---|
| 196 | | - } else { |
|---|
| 197 | | - hugetlb_bad_size(); |
|---|
| 198 | | - printk(KERN_ERR "hugepagesz: Unsupported page size %lu M\n", |
|---|
| 199 | | - ps >> 20); |
|---|
| 200 | | - return 0; |
|---|
| 201 | | - } |
|---|
| 202 | | - return 1; |
|---|
| 185 | + if (size == PMD_SIZE) |
|---|
| 186 | + return true; |
|---|
| 187 | + else if (size == PUD_SIZE && boot_cpu_has(X86_FEATURE_GBPAGES)) |
|---|
| 188 | + return true; |
|---|
| 189 | + else |
|---|
| 190 | + return false; |
|---|
| 203 | 191 | } |
|---|
| 204 | | -__setup("hugepagesz=", setup_hugepagesz); |
|---|
| 205 | 192 | |
|---|
| 206 | | -#if (defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA) |
|---|
| 193 | +#ifdef CONFIG_CONTIG_ALLOC |
|---|
| 207 | 194 | static __init int gigantic_pages_init(void) |
|---|
| 208 | 195 | { |
|---|
| 209 | 196 | /* With compaction or CMA we can allocate gigantic pages at runtime */ |
|---|
| 210 | | - if (boot_cpu_has(X86_FEATURE_GBPAGES) && !size_to_hstate(1UL << PUD_SHIFT)) |
|---|
| 197 | + if (boot_cpu_has(X86_FEATURE_GBPAGES)) |
|---|
| 211 | 198 | hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); |
|---|
| 212 | 199 | return 0; |
|---|
| 213 | 200 | } |
|---|