linux/arch/x86
Kirill A. Shutemov f530ee95b7 x86/boot/compressed: Reserve more memory for page tables
The decompressor has a hard limit on the number of page tables it can
allocate. This limit is defined at compile-time and will cause boot
failure if it is reached.

The kernel is very strict and calculates the limit precisely for the
worst-case scenario based on the current configuration. However, it is
easy to forget to adjust the limit when a new use-case arises. The
worst-case scenario is rarely encountered during sanity checks.

In the case of enabling 5-level paging, a use-case was overlooked. The
limit needs to be increased by one to accommodate the additional level.
This oversight went unnoticed until Aaron attempted to run the kernel
via kexec with 5-level paging and unaccepted memory enabled.

Update wost-case calculations to include 5-level paging.

To address this issue, let's allocate some extra space for page tables.
128K should be sufficient for any use-case. The logic can be simplified
by using a single value for all kernel configurations.

[ Also add a warning, should this memory run low - by Dave Hansen. ]

Fixes: 34bbb0009f ("x86/boot/compressed: Enable 5-level paging during decompression stage")
Reported-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20230915070221.10266-1-kirill.shutemov@linux.intel.com
2023-09-17 09:48:57 +02:00
..
boot x86/boot/compressed: Reserve more memory for page tables 2023-09-17 09:48:57 +02:00
coco - Some SEV and CC platform helpers cleanup and simplifications now that 2023-06-27 13:26:30 -07:00
configs - The first, cleanup part of the microcode loader reorg tglx has been 2023-08-28 15:55:20 -07:00
crypto crypto: x86/aesni - remove unused parameter to aes_set_key_common() 2023-07-22 13:59:39 +12:00
entry Add x86 shadow stack support 2023-08-31 12:20:12 -07:00
events perf/x86/uncore: Correct the number of CHAs on EMR 2023-09-05 21:50:21 +02:00
hyperv hyperv-next for v6.6 2023-09-04 11:26:29 -07:00
ia32
include x86/boot/compressed: Reserve more memory for page tables 2023-09-17 09:48:57 +02:00
kernel x86/platform/uv: Use alternate source for socket to node data 2023-09-11 10:06:22 -07:00
kvm ARM: 2023-09-07 13:52:20 -07:00
lib x86/ibt: Avoid duplicate ENDBR in __put_user_nocheck*() 2023-09-12 17:51:24 +02:00
math-emu x86/fpu: Include asm/fpu/regset.h 2023-05-18 11:56:18 -07:00
mm Add x86 shadow stack support 2023-08-31 12:20:12 -07:00
net bpf: Support new 32bit offset jmp instruction 2023-07-27 18:52:33 -07:00
pci pci-v6.6-changes 2023-08-30 20:23:07 -07:00
platform * Rework apic callbacks, getting rid of unnecessary ones and 2023-08-30 10:44:46 -07:00
power x86/topology: Remove CPU0 hotplug option 2023-05-15 13:44:49 +02:00
purgatory x86/purgatory: Include header for warn() declaration 2023-08-03 16:37:18 +02:00
ras
realmode x86/realmode: Make stack lock work in trampoline_compat() 2023-05-30 14:11:47 +02:00
tools ELF: fix all "Elf" typos 2023-04-08 13:45:37 -07:00
um um: Hard-code the result of 'uname -s' 2023-08-26 22:40:37 +02:00
video Merge drm/drm-next into drm-misc-next 2023-07-24 15:44:47 +02:00
virt/vmx/tdx
xen Add x86 shadow stack support 2023-08-31 12:20:12 -07:00
.gitignore
Kbuild
Kconfig Add x86 shadow stack support 2023-08-31 12:20:12 -07:00
Kconfig.assembler x86/shstk: Add Kconfig option for shadow stack 2023-07-11 14:12:18 -07:00
Kconfig.cpu x86/cpu: Remove X86_FEATURE_NAMES 2023-05-15 20:03:08 +02:00
Kconfig.debug docs: move x86 documentation into Documentation/arch/ 2023-03-30 12:58:51 -06:00
Makefile Kbuild updates for v6.6 2023-09-05 11:01:47 -07:00
Makefile_32.cpu
Makefile.postlink x86/build: Avoid relocation information in final vmlinux 2023-06-14 19:54:40 +02:00
Makefile.um um: Only disable SSE on clang to work around old GCC bugs 2023-04-04 09:57:05 +02:00