[PATCH v1 1/1] kexec: x86: Include pref_address when looking for a memory hole
Simon Horman
horms at kernel.org
Fri Nov 15 01:45:08 PST 2024
On Wed, Nov 13, 2024 at 05:44:37PM +0200, Andy Shevchenko wrote:
> When the kernel is built relocatable, the starting address can be
> anything above 1Mb on x86. However, the startup_*() entries consider
> that the minumum address for the kernel for the decompression has to
> be at least LOAD_PHYSICAL_ADDR which is turn the value that is provided
> as pref_address in boot protocol. The boot protocol itself says:
>
> This field, if nonzero, represents a preferred load address for the
> kernel. A relocating bootloader should attempt to load at this
> address if possible.
>
> Besides that the code in the kernel (arch/x86/kernel/kexec-bzimage64.c)
> has these lines (in bzImage64_load() function):
>
> if (header->pref_address < MIN_KERNEL_LOAD_ADDR)
> kbuf.buf_min = MIN_KERNEL_LOAD_ADDR;
> else
> kbuf.buf_min = header->pref_address;
>
> All that said, do the same in kexec tools. Without this patch
> the relocatable kernel may end up in the memory hole that is
> not enough for in-place decompression and Bad Things will happen
> as it's proven on Intel Merrifield, that has a reserved memory
> block starting at 64Mb.
>
> Note, it doesn't mean that kernel has no issues itself in this particular
> stage, but at least we may work around some corner cases for kexec.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
Thanks Andy, applied.
More information about the kexec
mailing list