kexec load failure introduced by "x86, memblock: Replace e820_/_early string with memblock_"
vgoyal at redhat.com
Tue Sep 28 09:54:49 EDT 2010
On Mon, Sep 27, 2010 at 08:46:42PM -0700, H. Peter Anvin wrote:
> On 09/27/2010 05:53 PM, Vivek Goyal wrote:
> > Actually, hardcoding the upper limit to 4G is probably not the best idea.
> > Kexec loads the the relocatable binary (purgatory) and I remember that
> > one of the generated relocation type was signed 32 bit and allowed max value
> > to be 2G only. So IIRC, purgatory code always needed to be loaded below 2G.
> > I liked HPA's other idea better of introducing memblock_find_in_range_lowest()
> > so that we search bottom up and not rely on a specific upper limit.
> No, it's just another crappy hack which is broken in the same way. It's
> better than open-coding, but it's still a hack.
> The Right Thing[TM] to do is for kexec to communicate the topmost
> address it wants to this code, so it has both the upper and the lower
> boundaries available to it instead of just one.
Being able to specify the upper limit would be the best thing so that
kernel does not have to make any assumptions or hardcode anything.
Question is how to determine the upper limit.
- The upper limit will depend on what is being loaded in reserved region.
Reserving memory using crashkernel= is a boot time optin and that point
of time kexec has not even run. So we don't know what is the upper
Now we can do extra reboot to make it happen. Boot first kernel without
reserving any memory. Introduce an option in kexec which tells user what
are the segments kexec would like to load (for a given binary) and what
are there upper memory limits and then user goes ahead modifies the
command line and reboots the kernel back.
This all sounds not so clean. Especially upper limit might change based
on binary being loaded and a user might have to perform a reboot again.
So to me trying to get lowest memory available possible for crashkernel
reservations is not that a bad idea. It is certainly better than making
hardcoded assumptions about the upper limit.
More information about the kexec