Linux x86/x86_64 Will Now Always Reserve The First 1MB Of RAM
The Linux x86/x86_64 kernel code already had logic in place for reserving portions of the first 1MB of RAM to avoid the BIOS or kernel potentially clobbering that space among other reasons while now Linux 5.13 is doing away with that "wankery" and will just unconditionally always reserve the first 1MB of RAM.
The Linux kernel was already catering to Intel Sandy Bridge graphics accessing memory below the 1MB mark, the first 64K of memory are known to be corrupted by some BIOSes, and similar problems coming up in that low area of memory. But rather than dealing with all that logic and other possible niche cases besides the EGA/VGA frame-buffer and BIOS, the kernel is playing it safe and just always reserving the first 1MB of RAM so it will not get clobbered by the kernel.
The motivation now for Linux 5.13 in getting that 1MB unconditional reservation in place for Linux x86/x86_64 stems from a bug report around an AMD Ryzen system being unbootable on Linux 5.13 since the change to consolidate their early memory reservations handling. Just unconditionally doing the first 1MB makes things much simpler to handle.
The change was sent in this morning as part of x86/urgent. "Do away with all the wankery of reserving X amount of memory in the first megabyte to prevent BIOS corrupting it and simply and unconditionally reserve the whole first megabyte."
With this morning's x86 pull request is also the change of disabling Intel's new ENQCMD functionality for forthcoming Sapphire Rapids server CPUs until that kernel code can be properly cleaned up and fixed. The x86 pull also now deals with 1st Gen Hygon (AMD Zen based) CPUs being out-of-spec for not supporting the AMD64_SEV MSR so instead the Linux AMD SEV code is checking the CPUID bits first.
The Linux kernel was already catering to Intel Sandy Bridge graphics accessing memory below the 1MB mark, the first 64K of memory are known to be corrupted by some BIOSes, and similar problems coming up in that low area of memory. But rather than dealing with all that logic and other possible niche cases besides the EGA/VGA frame-buffer and BIOS, the kernel is playing it safe and just always reserving the first 1MB of RAM so it will not get clobbered by the kernel.
The motivation now for Linux 5.13 in getting that 1MB unconditional reservation in place for Linux x86/x86_64 stems from a bug report around an AMD Ryzen system being unbootable on Linux 5.13 since the change to consolidate their early memory reservations handling. Just unconditionally doing the first 1MB makes things much simpler to handle.
The change was sent in this morning as part of x86/urgent. "Do away with all the wankery of reserving X amount of memory in the first megabyte to prevent BIOS corrupting it and simply and unconditionally reserve the whole first megabyte."
With this morning's x86 pull request is also the change of disabling Intel's new ENQCMD functionality for forthcoming Sapphire Rapids server CPUs until that kernel code can be properly cleaned up and fixed. The x86 pull also now deals with 1st Gen Hygon (AMD Zen based) CPUs being out-of-spec for not supporting the AMD64_SEV MSR so instead the Linux AMD SEV code is checking the CPUID bits first.
48 Comments