Kexec & Memory Zones question

WANG Cong xiyou.wangcong at
Thu May 12 06:03:03 EDT 2011

On Wed, 11 May 2011 11:09:08 -0400, Vivek Goyal wrote:

> We have discussed this in the past and due to various reasons the max
> amount of RAM you can boot your kernel from seems to be 896MB for x86_64
> and 512MB for 32bit. I shall have to open a previous thread with hpa to
> get exact numbers. So loading kernel even higher is not the solution.

On the kexec-tools side, I think the limit is hard-coded,

./include/x86/x86-linux.h:250:#define DEFAULT_INITRD_ADDR_MAX 0x37FFFFFF

but we have,

        initrd_addr_max = DEFAULT_INITRD_ADDR_MAX;
        if (real_mode->protocol_version >= 0x0203) {
                initrd_addr_max = real_mode->initrd_addr_max;
                dbgprintf("initrd_addr_max is 0x%lx\n", initrd_addr_max);

so, from the code, initrd_addr_max can be provided by the bootloader.

I remember on the kernel side there's also such a limit, but I can't
find where it is. I am wondering what prevents us from increasing this 
limit to 4G on i386 and even higher on x86_64.


More information about the kexec mailing list