Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
kexec: x86: Include pref_address when looking for a memory hole
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 <[email protected]> Signed-off-by: Simon Horman <[email protected]>
- Loading branch information