reserved crash memory above #define DEFAULT_BZIMAGE_ADDR_MAX 0x37FFFFFF
Thomas Renninger
trenn at suse.de
Wed Apr 17 09:52:13 EDT 2013
Hi,
while trying to switch to kvm setup with a latest kernel I realized that
blank:
crashkernel=64M
param will reserve this memory area:
7b000000-7effffff : Crash kernel
and kexec does not successfully load the kernel due to (hole_max output
added myself):
Could not find a free area of memory of 4c1000 bytes, hole_max: 0x37ffffff...
locate_hole failed
Defining the place where to set crashmemory area:
crashkernel=64M at 32M
02000000-05ffffff : Crash kernel
works.
I finally found out that in kexec-tools include/x86/x86-linux.h:
#define DEFAULT_BZIMAGE_ADDR_MAX 0x37FFFFFF
is defined and it looks like new kernels try to place the crashmemory
area too high.
So the kexec-tools max physical address seem to be 0x37FFFFFF
while the kernel seem to search a free region for crash kernel reservation
up to MAX_MEM.
Damn, after doing a git pull, I run into an other unrelated bug and I could
not quickly test below which I think could fix this (copy and pasted):
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -511,7 +511,8 @@ static void __init
memblock_x86_reserve_range_setup_data(void)
#ifdef CONFIG_X86_32
# define CRASH_KERNEL_ADDR_MAX (512 << 20)
#else
-# define CRASH_KERNEL_ADDR_MAX MAXMEM
+# define KEXEC_BZIMAGE_MAX_ADDR 0x37FFFFFF
+# define CRASH_KERNEL_ADDR_MAX KEXEC_BZIMAGE_MAX_ADDR
#endif
So I see no error/warning when crashkernel area is reserved in dmesg:
Reserving 64MB of memory at 1968MB for crashkernel (System RAM: 2047MB)
but it won't work.
Thomas
kexec backtrace from the error message in add_buffer.
(gdb) bt
#0 locate_hole (info=0x7fffffffe0b0, hole_size=4984832, hole_align=16777216,
hole_min=1048576, hole_max=939524095, hole_end=1) at kexec/kexec.c:290
#1 0x0000000000402d40 in add_buffer_phys_virt (info=0x7fffffffe0b0,
buf=0x7ffff6a19410, bufsz=4982070, memsz=4984832, buf_align=16777216,
buf_min=1048576, buf_max=939524095, buf_end=1, phys=0) at
kexec/kexec.c:372
#2 0x0000000000402dee in add_buffer_virt (info=0x7fffffffe0b0,
buf=0x7ffff6a19410, bufsz=4982070, memsz=4982070, buf_align=16777216,
buf_min=1048576, buf_max=939524095, buf_end=1) at kexec/kexec.c:386
#3 0x000000000040ae7d in add_buffer (info=0x7fffffffe0b0, buf=0x7ffff6a19410,
bufsz=4982070, memsz=4982070, buf_align=16777216, buf_min=1048576,
buf_max=939524095, buf_end=1) at kexec/add_buffer.c:12
#4 0x000000000040bfb8 in do_bzImage_load (info=0x7fffffffe0b0,
kernel=0x7ffff6a15010 "MZ\352\a", kernel_len=4999478,
command_line=0x63d120 " root=UUID=f998139a-57d9-422d-af05-159d4e1187ab
sysrq_always_enabled panic=10 console=ttyS0,115200 resume=/dev/vda1 quiet
rd_NO_PLYMOUTH transparent_hugepage=never elevator=deadline sysrq=1
reset_de"...,
command_line_len=276, initrd=0x7ffff4b34010 "\037\213\b",
initrd_len=32374921, real_mode_entry=0)
at kexec/arch/i386/kexec-bzImage.c:286
#5 0x000000000040c5ca in bzImage_load (argc=6, argv=0x7fffffffe318,
buf=0x7ffff6a15010 "MZ\352\a", len=4999478, info=0x7fffffffe0b0)
at kexec/arch/i386/kexec-bzImage.c:447
#6 0x0000000000403cf1 in my_load (type=0x0, fileind=5, argc=6,
argv=0x7fffffffe318, kexec_flags=1, entry=0x0) at kexec/kexec.c:725
#7 0x0000000000404b7a in main (argc=6, argv=0x7fffffffe318)
at kexec/kexec.c:1223
More information about the kexec
mailing list