Skip to content

Commit 92a0f81

Browse files
KAGA-KOKOIngo Molnar
authored andcommitted
x86/cpu_entry_area: Move it out of the fixmap
Put the cpu_entry_area into a separate P4D entry. The fixmap gets too big and 0-day already hit a case where the fixmap PTEs were cleared by cleanup_highmap(). Aside of that the fixmap API is a pain as it's all backwards. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent ed1bbc4 commit 92a0f81

File tree

14 files changed

+143
-88
lines changed

14 files changed

+143
-88
lines changed

Documentation/x86/x86_64/mm.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB)
1212
... unused hole ...
1313
ffffec0000000000 - fffffbffffffffff (=44 bits) kasan shadow memory (16TB)
1414
... unused hole ...
15+
fffffe8000000000 - fffffeffffffffff (=39 bits) cpu_entry_area mapping
1516
ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks
1617
... unused hole ...
1718
ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space
@@ -35,6 +36,7 @@ ffd4000000000000 - ffd5ffffffffffff (=49 bits) virtual memory map (512TB)
3536
... unused hole ...
3637
ffdf000000000000 - fffffc0000000000 (=53 bits) kasan shadow memory (8PB)
3738
... unused hole ...
39+
fffffe8000000000 - fffffeffffffffff (=39 bits) cpu_entry_area mapping
3840
ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks
3941
... unused hole ...
4042
ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space

arch/x86/include/asm/cpu_entry_area.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,26 @@ struct cpu_entry_area {
4343
};
4444

4545
#define CPU_ENTRY_AREA_SIZE (sizeof(struct cpu_entry_area))
46-
#define CPU_ENTRY_AREA_PAGES (CPU_ENTRY_AREA_SIZE / PAGE_SIZE)
46+
#define CPU_ENTRY_AREA_TOT_SIZE (CPU_ENTRY_AREA_SIZE * NR_CPUS)
4747

4848
DECLARE_PER_CPU(struct cpu_entry_area *, cpu_entry_area);
4949

5050
extern void setup_cpu_entry_areas(void);
51+
extern void cea_set_pte(void *cea_vaddr, phys_addr_t pa, pgprot_t flags);
52+
53+
#define CPU_ENTRY_AREA_RO_IDT CPU_ENTRY_AREA_BASE
54+
#define CPU_ENTRY_AREA_PER_CPU (CPU_ENTRY_AREA_RO_IDT + PAGE_SIZE)
55+
56+
#define CPU_ENTRY_AREA_RO_IDT_VADDR ((void *)CPU_ENTRY_AREA_RO_IDT)
57+
58+
#define CPU_ENTRY_AREA_MAP_SIZE \
59+
(CPU_ENTRY_AREA_PER_CPU + CPU_ENTRY_AREA_TOT_SIZE - CPU_ENTRY_AREA_BASE)
60+
61+
extern struct cpu_entry_area *get_cpu_entry_area(int cpu);
62+
63+
static inline struct entry_stack *cpu_entry_stack(int cpu)
64+
{
65+
return &get_cpu_entry_area(cpu)->entry_stack_page.stack;
66+
}
5167

5268
#endif

arch/x86/include/asm/desc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <asm/mmu.h>
88
#include <asm/fixmap.h>
99
#include <asm/irq_vectors.h>
10+
#include <asm/cpu_entry_area.h>
1011

1112
#include <linux/smp.h>
1213
#include <linux/percpu.h>

arch/x86/include/asm/fixmap.h

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#else
2626
#include <uapi/asm/vsyscall.h>
2727
#endif
28-
#include <asm/cpu_entry_area.h>
2928

3029
/*
3130
* We can't declare FIXADDR_TOP as variable for x86_64 because vsyscall
@@ -84,7 +83,6 @@ enum fixed_addresses {
8483
FIX_IO_APIC_BASE_0,
8584
FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1,
8685
#endif
87-
FIX_RO_IDT, /* Virtual mapping for read-only IDT */
8886
#ifdef CONFIG_X86_32
8987
FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
9088
FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
@@ -100,9 +98,6 @@ enum fixed_addresses {
10098
#ifdef CONFIG_X86_INTEL_MID
10199
FIX_LNW_VRTC,
102100
#endif
103-
/* Fixmap entries to remap the GDTs, one per processor. */
104-
FIX_CPU_ENTRY_AREA_TOP,
105-
FIX_CPU_ENTRY_AREA_BOTTOM = FIX_CPU_ENTRY_AREA_TOP + (CPU_ENTRY_AREA_PAGES * NR_CPUS) - 1,
106101

107102
#ifdef CONFIG_ACPI_APEI_GHES
108103
/* Used for GHES mapping from assorted contexts */
@@ -143,7 +138,7 @@ enum fixed_addresses {
143138
extern void reserve_top_address(unsigned long reserve);
144139

145140
#define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
146-
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
141+
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
147142

148143
extern int fixmaps_set;
149144

@@ -191,30 +186,5 @@ void __init *early_memremap_decrypted_wp(resource_size_t phys_addr,
191186
void __early_set_fixmap(enum fixed_addresses idx,
192187
phys_addr_t phys, pgprot_t flags);
193188

194-
static inline unsigned int __get_cpu_entry_area_page_index(int cpu, int page)
195-
{
196-
BUILD_BUG_ON(sizeof(struct cpu_entry_area) % PAGE_SIZE != 0);
197-
198-
return FIX_CPU_ENTRY_AREA_BOTTOM - cpu*CPU_ENTRY_AREA_PAGES - page;
199-
}
200-
201-
#define __get_cpu_entry_area_offset_index(cpu, offset) ({ \
202-
BUILD_BUG_ON(offset % PAGE_SIZE != 0); \
203-
__get_cpu_entry_area_page_index(cpu, offset / PAGE_SIZE); \
204-
})
205-
206-
#define get_cpu_entry_area_index(cpu, field) \
207-
__get_cpu_entry_area_offset_index((cpu), offsetof(struct cpu_entry_area, field))
208-
209-
static inline struct cpu_entry_area *get_cpu_entry_area(int cpu)
210-
{
211-
return (struct cpu_entry_area *)__fix_to_virt(__get_cpu_entry_area_page_index(cpu, 0));
212-
}
213-
214-
static inline struct entry_stack *cpu_entry_stack(int cpu)
215-
{
216-
return &get_cpu_entry_area(cpu)->entry_stack_page.stack;
217-
}
218-
219189
#endif /* !__ASSEMBLY__ */
220190
#endif /* _ASM_X86_FIXMAP_H */

arch/x86/include/asm/pgtable_32_types.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,22 @@ extern bool __vmalloc_start_set; /* set once high_memory is set */
3838
#define LAST_PKMAP 1024
3939
#endif
4040

41-
#define PKMAP_BASE ((FIXADDR_START - PAGE_SIZE * (LAST_PKMAP + 1)) \
42-
& PMD_MASK)
41+
/*
42+
* Define this here and validate with BUILD_BUG_ON() in pgtable_32.c
43+
* to avoid include recursion hell
44+
*/
45+
#define CPU_ENTRY_AREA_PAGES (NR_CPUS * 40)
46+
47+
#define CPU_ENTRY_AREA_BASE \
48+
((FIXADDR_START - PAGE_SIZE * (CPU_ENTRY_AREA_PAGES + 1)) & PMD_MASK)
49+
50+
#define PKMAP_BASE \
51+
((CPU_ENTRY_AREA_BASE - PAGE_SIZE) & PMD_MASK)
4352

4453
#ifdef CONFIG_HIGHMEM
4554
# define VMALLOC_END (PKMAP_BASE - 2 * PAGE_SIZE)
4655
#else
47-
# define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE)
56+
# define VMALLOC_END (CPU_ENTRY_AREA_BASE - 2 * PAGE_SIZE)
4857
#endif
4958

5059
#define MODULES_VADDR VMALLOC_START

arch/x86/include/asm/pgtable_64_types.h

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,32 +76,41 @@ typedef struct { pteval_t pte; } pte_t;
7676
#define PGDIR_MASK (~(PGDIR_SIZE - 1))
7777

7878
/* See Documentation/x86/x86_64/mm.txt for a description of the memory map. */
79-
#define MAXMEM _AC(__AC(1, UL) << MAX_PHYSMEM_BITS, UL)
79+
#define MAXMEM _AC(__AC(1, UL) << MAX_PHYSMEM_BITS, UL)
80+
8081
#ifdef CONFIG_X86_5LEVEL
81-
#define VMALLOC_SIZE_TB _AC(16384, UL)
82-
#define __VMALLOC_BASE _AC(0xff92000000000000, UL)
83-
#define __VMEMMAP_BASE _AC(0xffd4000000000000, UL)
82+
# define VMALLOC_SIZE_TB _AC(16384, UL)
83+
# define __VMALLOC_BASE _AC(0xff92000000000000, UL)
84+
# define __VMEMMAP_BASE _AC(0xffd4000000000000, UL)
8485
#else
85-
#define VMALLOC_SIZE_TB _AC(32, UL)
86-
#define __VMALLOC_BASE _AC(0xffffc90000000000, UL)
87-
#define __VMEMMAP_BASE _AC(0xffffea0000000000, UL)
86+
# define VMALLOC_SIZE_TB _AC(32, UL)
87+
# define __VMALLOC_BASE _AC(0xffffc90000000000, UL)
88+
# define __VMEMMAP_BASE _AC(0xffffea0000000000, UL)
8889
#endif
90+
8991
#ifdef CONFIG_RANDOMIZE_MEMORY
90-
#define VMALLOC_START vmalloc_base
91-
#define VMEMMAP_START vmemmap_base
92+
# define VMALLOC_START vmalloc_base
93+
# define VMEMMAP_START vmemmap_base
9294
#else
93-
#define VMALLOC_START __VMALLOC_BASE
94-
#define VMEMMAP_START __VMEMMAP_BASE
95+
# define VMALLOC_START __VMALLOC_BASE
96+
# define VMEMMAP_START __VMEMMAP_BASE
9597
#endif /* CONFIG_RANDOMIZE_MEMORY */
96-
#define VMALLOC_END (VMALLOC_START + _AC((VMALLOC_SIZE_TB << 40) - 1, UL))
97-
#define MODULES_VADDR (__START_KERNEL_map + KERNEL_IMAGE_SIZE)
98+
99+
#define VMALLOC_END (VMALLOC_START + _AC((VMALLOC_SIZE_TB << 40) - 1, UL))
100+
101+
#define MODULES_VADDR (__START_KERNEL_map + KERNEL_IMAGE_SIZE)
98102
/* The module sections ends with the start of the fixmap */
99-
#define MODULES_END __fix_to_virt(__end_of_fixed_addresses + 1)
100-
#define MODULES_LEN (MODULES_END - MODULES_VADDR)
101-
#define ESPFIX_PGD_ENTRY _AC(-2, UL)
102-
#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << P4D_SHIFT)
103-
#define EFI_VA_START ( -4 * (_AC(1, UL) << 30))
104-
#define EFI_VA_END (-68 * (_AC(1, UL) << 30))
103+
#define MODULES_END __fix_to_virt(__end_of_fixed_addresses + 1)
104+
#define MODULES_LEN (MODULES_END - MODULES_VADDR)
105+
106+
#define ESPFIX_PGD_ENTRY _AC(-2, UL)
107+
#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << P4D_SHIFT)
108+
109+
#define CPU_ENTRY_AREA_PGD _AC(-3, UL)
110+
#define CPU_ENTRY_AREA_BASE (CPU_ENTRY_AREA_PGD << P4D_SHIFT)
111+
112+
#define EFI_VA_START ( -4 * (_AC(1, UL) << 30))
113+
#define EFI_VA_END (-68 * (_AC(1, UL) << 30))
105114

106115
#define EARLY_DYNAMIC_PAGE_TABLES 64
107116

arch/x86/kernel/dumpstack.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <linux/nmi.h>
1919
#include <linux/sysfs.h>
2020

21+
#include <asm/cpu_entry_area.h>
2122
#include <asm/stacktrace.h>
2223
#include <asm/unwind.h>
2324

arch/x86/kernel/traps.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -951,8 +951,9 @@ void __init trap_init(void)
951951
* "sidt" instruction will not leak the location of the kernel, and
952952
* to defend the IDT against arbitrary memory write vulnerabilities.
953953
* It will be reloaded in cpu_init() */
954-
__set_fixmap(FIX_RO_IDT, __pa_symbol(idt_table), PAGE_KERNEL_RO);
955-
idt_descr.address = fix_to_virt(FIX_RO_IDT);
954+
cea_set_pte(CPU_ENTRY_AREA_RO_IDT_VADDR, __pa_symbol(idt_table),
955+
PAGE_KERNEL_RO);
956+
idt_descr.address = CPU_ENTRY_AREA_RO_IDT;
956957

957958
/*
958959
* Should be a barrier for any external CPU state:

arch/x86/mm/cpu_entry_area.c

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,27 @@ static DEFINE_PER_CPU_PAGE_ALIGNED(char, exception_stacks
1515
[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]);
1616
#endif
1717

18+
struct cpu_entry_area *get_cpu_entry_area(int cpu)
19+
{
20+
unsigned long va = CPU_ENTRY_AREA_PER_CPU + cpu * CPU_ENTRY_AREA_SIZE;
21+
BUILD_BUG_ON(sizeof(struct cpu_entry_area) % PAGE_SIZE != 0);
22+
23+
return (struct cpu_entry_area *) va;
24+
}
25+
EXPORT_SYMBOL(get_cpu_entry_area);
26+
27+
void cea_set_pte(void *cea_vaddr, phys_addr_t pa, pgprot_t flags)
28+
{
29+
unsigned long va = (unsigned long) cea_vaddr;
30+
31+
set_pte_vaddr(va, pfn_pte(pa >> PAGE_SHIFT, flags));
32+
}
33+
1834
static void __init
19-
set_percpu_fixmap_pages(int idx, void *ptr, int pages, pgprot_t prot)
35+
cea_map_percpu_pages(void *cea_vaddr, void *ptr, int pages, pgprot_t prot)
2036
{
21-
for ( ; pages; pages--, idx--, ptr += PAGE_SIZE)
22-
__set_fixmap(idx, per_cpu_ptr_to_phys(ptr), prot);
37+
for ( ; pages; pages--, cea_vaddr+= PAGE_SIZE, ptr += PAGE_SIZE)
38+
cea_set_pte(cea_vaddr, per_cpu_ptr_to_phys(ptr), prot);
2339
}
2440

2541
/* Setup the fixmap mappings only once per-processor */
@@ -47,10 +63,12 @@ static void __init setup_cpu_entry_area(int cpu)
4763
pgprot_t tss_prot = PAGE_KERNEL;
4864
#endif
4965

50-
__set_fixmap(get_cpu_entry_area_index(cpu, gdt), get_cpu_gdt_paddr(cpu), gdt_prot);
51-
set_percpu_fixmap_pages(get_cpu_entry_area_index(cpu, entry_stack_page),
52-
per_cpu_ptr(&entry_stack_storage, cpu), 1,
53-
PAGE_KERNEL);
66+
cea_set_pte(&get_cpu_entry_area(cpu)->gdt, get_cpu_gdt_paddr(cpu),
67+
gdt_prot);
68+
69+
cea_map_percpu_pages(&get_cpu_entry_area(cpu)->entry_stack_page,
70+
per_cpu_ptr(&entry_stack_storage, cpu), 1,
71+
PAGE_KERNEL);
5472

5573
/*
5674
* The Intel SDM says (Volume 3, 7.2.1):
@@ -72,10 +90,9 @@ static void __init setup_cpu_entry_area(int cpu)
7290
BUILD_BUG_ON((offsetof(struct tss_struct, x86_tss) ^
7391
offsetofend(struct tss_struct, x86_tss)) & PAGE_MASK);
7492
BUILD_BUG_ON(sizeof(struct tss_struct) % PAGE_SIZE != 0);
75-
set_percpu_fixmap_pages(get_cpu_entry_area_index(cpu, tss),
76-
&per_cpu(cpu_tss_rw, cpu),
77-
sizeof(struct tss_struct) / PAGE_SIZE,
78-
tss_prot);
93+
cea_map_percpu_pages(&get_cpu_entry_area(cpu)->tss,
94+
&per_cpu(cpu_tss_rw, cpu),
95+
sizeof(struct tss_struct) / PAGE_SIZE, tss_prot);
7996

8097
#ifdef CONFIG_X86_32
8198
per_cpu(cpu_entry_area, cpu) = get_cpu_entry_area(cpu);
@@ -85,20 +102,37 @@ static void __init setup_cpu_entry_area(int cpu)
85102
BUILD_BUG_ON(sizeof(exception_stacks) % PAGE_SIZE != 0);
86103
BUILD_BUG_ON(sizeof(exception_stacks) !=
87104
sizeof(((struct cpu_entry_area *)0)->exception_stacks));
88-
set_percpu_fixmap_pages(get_cpu_entry_area_index(cpu, exception_stacks),
89-
&per_cpu(exception_stacks, cpu),
90-
sizeof(exception_stacks) / PAGE_SIZE,
91-
PAGE_KERNEL);
105+
cea_map_percpu_pages(&get_cpu_entry_area(cpu)->exception_stacks,
106+
&per_cpu(exception_stacks, cpu),
107+
sizeof(exception_stacks) / PAGE_SIZE, PAGE_KERNEL);
92108

93-
__set_fixmap(get_cpu_entry_area_index(cpu, entry_trampoline),
109+
cea_set_pte(&get_cpu_entry_area(cpu)->entry_trampoline,
94110
__pa_symbol(_entry_trampoline), PAGE_KERNEL_RX);
95111
#endif
96112
}
97113

114+
static __init void setup_cpu_entry_area_ptes(void)
115+
{
116+
#ifdef CONFIG_X86_32
117+
unsigned long start, end;
118+
119+
BUILD_BUG_ON(CPU_ENTRY_AREA_PAGES * PAGE_SIZE < CPU_ENTRY_AREA_MAP_SIZE);
120+
BUG_ON(CPU_ENTRY_AREA_BASE & ~PMD_MASK);
121+
122+
start = CPU_ENTRY_AREA_BASE;
123+
end = start + CPU_ENTRY_AREA_MAP_SIZE;
124+
125+
for (; start < end; start += PMD_SIZE)
126+
populate_extra_pte(start);
127+
#endif
128+
}
129+
98130
void __init setup_cpu_entry_areas(void)
99131
{
100132
unsigned int cpu;
101133

134+
setup_cpu_entry_area_ptes();
135+
102136
for_each_possible_cpu(cpu)
103137
setup_cpu_entry_area(cpu);
104138
}

arch/x86/mm/dump_pagetables.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ enum address_markers_idx {
5858
KASAN_SHADOW_START_NR,
5959
KASAN_SHADOW_END_NR,
6060
#endif
61+
CPU_ENTRY_AREA_NR,
6162
#ifdef CONFIG_X86_ESPFIX64
6263
ESPFIX_START_NR,
6364
#endif
@@ -81,6 +82,7 @@ static struct addr_marker address_markers[] = {
8182
[KASAN_SHADOW_START_NR] = { KASAN_SHADOW_START, "KASAN shadow" },
8283
[KASAN_SHADOW_END_NR] = { KASAN_SHADOW_END, "KASAN shadow end" },
8384
#endif
85+
[CPU_ENTRY_AREA_NR] = { CPU_ENTRY_AREA_BASE,"CPU entry Area" },
8486
#ifdef CONFIG_X86_ESPFIX64
8587
[ESPFIX_START_NR] = { ESPFIX_BASE_ADDR, "ESPfix Area", 16 },
8688
#endif
@@ -104,6 +106,7 @@ enum address_markers_idx {
104106
#ifdef CONFIG_HIGHMEM
105107
PKMAP_BASE_NR,
106108
#endif
109+
CPU_ENTRY_AREA_NR,
107110
FIXADDR_START_NR,
108111
END_OF_SPACE_NR,
109112
};
@@ -116,6 +119,7 @@ static struct addr_marker address_markers[] = {
116119
#ifdef CONFIG_HIGHMEM
117120
[PKMAP_BASE_NR] = { 0UL, "Persistent kmap() Area" },
118121
#endif
122+
[CPU_ENTRY_AREA_NR] = { 0UL, "CPU entry area" },
119123
[FIXADDR_START_NR] = { 0UL, "Fixmap area" },
120124
[END_OF_SPACE_NR] = { -1, NULL }
121125
};
@@ -541,8 +545,8 @@ static int __init pt_dump_init(void)
541545
address_markers[PKMAP_BASE_NR].start_address = PKMAP_BASE;
542546
# endif
543547
address_markers[FIXADDR_START_NR].start_address = FIXADDR_START;
548+
address_markers[CPU_ENTRY_AREA_NR].start_address = CPU_ENTRY_AREA_BASE;
544549
#endif
545-
546550
return 0;
547551
}
548552
__initcall(pt_dump_init);

arch/x86/mm/init_32.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include <asm/setup.h>
5151
#include <asm/set_memory.h>
5252
#include <asm/page_types.h>
53+
#include <asm/cpu_entry_area.h>
5354
#include <asm/init.h>
5455

5556
#include "mm_internal.h"
@@ -766,6 +767,7 @@ void __init mem_init(void)
766767
mem_init_print_info(NULL);
767768
printk(KERN_INFO "virtual kernel memory layout:\n"
768769
" fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n"
770+
" cpu_entry : 0x%08lx - 0x%08lx (%4ld kB)\n"
769771
#ifdef CONFIG_HIGHMEM
770772
" pkmap : 0x%08lx - 0x%08lx (%4ld kB)\n"
771773
#endif
@@ -777,6 +779,10 @@ void __init mem_init(void)
777779
FIXADDR_START, FIXADDR_TOP,
778780
(FIXADDR_TOP - FIXADDR_START) >> 10,
779781

782+
CPU_ENTRY_AREA_BASE,
783+
CPU_ENTRY_AREA_BASE + CPU_ENTRY_AREA_MAP_SIZE,
784+
CPU_ENTRY_AREA_MAP_SIZE >> 10,
785+
780786
#ifdef CONFIG_HIGHMEM
781787
PKMAP_BASE, PKMAP_BASE+LAST_PKMAP*PAGE_SIZE,
782788
(LAST_PKMAP*PAGE_SIZE) >> 10,

0 commit comments

Comments
 (0)