[PATCH,RFC] - make /proc/vmcore accesable on x86_64
Jiri Olsa
jolsa at redhat.com
Tue Oct 19 11:06:30 EDT 2010
hi,
I was playing around with preserve context feature on x86_64
and was not able to get the /proc/vmcore in the kexec-ed
kernel until I aplied attached patch.
I'm not at all sure this is right fix ;) but it seems
that /proc/vmcore is not loaded since the machine field in the
elf header is wrong.
If the x86_64 arch returns 0 (KEXEC_ARCH_DEFAULT) then following
condition in load_crashdump_segments function will fill 386 as the
machine for the vmcore elf header..
...
if ((info->kexec_flags & KEXEC_ARCH_MASK) == KEXEC_ARCH_X86_64)
{
elf_info.machine = EM_X86_64;
} else {
elf_info.machine = EM_386;
elf_info.lowmem_limit = X86_MAXMEM;
elf_info.get_note_info = get_crash_notes;
}
...
ending with kexec-ed kernel failing check for the machine,
and disabling vmcore interface...
I'm guessing that the reason is the load_crashdump_segments function
being shared among 32 and 64 bits.. but again, not sure ;)
My goal is to share data within the host and kexec-ed kernel,
so I'd like to use the /proc/vmcore for that.. any other
ideas are welcome :)
thanks,
jirka
---
diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
index 06e5ae9..40f989a 100644
--- a/kexec/arch/i386/crashdump-x86.c
+++ b/kexec/arch/i386/crashdump-x86.c
@@ -691,6 +691,8 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline,
struct memory_range *mem_range, *memmap_p;
struct crash_elf_info elf_info;
+ memset(&elf_info, 0x0, sizeof(elf_info));
+
/* Constant parts of the elf_info */
elf_info.data = ELFDATA2LSB;
elf_info.backup_src_start = BACKUP_SRC_START;
diff --git a/kexec/arch/x86_64/kexec-x86_64.c b/kexec/arch/x86_64/kexec-x86_64.c
index 3092643..c34fd92 100644
--- a/kexec/arch/x86_64/kexec-x86_64.c
+++ b/kexec/arch/x86_64/kexec-x86_64.c
@@ -134,10 +134,7 @@ int arch_process_options(int argc, char **argv)
}
const struct arch_map_entry arches[] = {
- /* For compatibility with older patches
- * use KEXEC_ARCH_DEFAULT instead of KEXEC_ARCH_X86_64 here.
- */
- { "x86_64", KEXEC_ARCH_DEFAULT },
+ { "x86_64", KEXEC_ARCH_X86_64 },
{ NULL, 0 },
};
More information about the kexec
mailing list