[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