[PATCH] Add the symbol "phys_base" to vmcoreinfo
oomichi at mxs.nes.nec.co.jp
Wed Apr 2 20:00:24 EDT 2008
Vivek Goyal wrote:
> On Mon, Mar 31, 2008 at 08:00:25PM +0900, Ken'ichi Ohmichi wrote:
>> Hi Andrew,
>> This patch fixes the problem that makedumpfile sometimes fails
>> on x86_64 machine. I hope that this patch will be merged to both
>> linux-2.6.25 and linux-18.104.22.168.
>> This patch adds the symbol "phys_base" to a vmcoreinfo data.
>> The vmcoreinfo data has the minimum debugging information only
>> for dump filtering. makedumpfile (dump filtering command) gets
>> it to distinguish unnecessary pages, and makedumpfile creates
>> a small dumpfile.
>> On x86_64 kernel which compiled with CONFIG_PHYSICAL_START=0x0
>> and CONFIG_RELOCATABLE=y, makedumpfile fails like the following:
>> # makedumpfile -d31 /proc/vmcore dumpfile
>> The kernel version is not supported.
>> The created dumpfile may be incomplete.
>> _exclude_free_page: Can't get next online node.
>> makedumpfile Failed.
>> The cause is the lack of the symbol "phys_base" in a vmcoreinfo
>> data. If the symbol "phys_base" does not exist, makedumpfile
>> considers an x86_64 kernel as non relocatable. As the result,
>> makedumpfile misunderstands the physical address where the kernel
>> is loaded, and it cannot translate a kernel virtual address to
>> physical address correctly. To fix this proble, the attached
>> patch which adds the symbol "phys_base" to a vmcoreinfo data.
>> Ken'ichi Ohmichi
>> Signed-off-by: Ken'ichi Ohmichi <oomichi at mxs.nes.nec.co.jp>
>> diff -rpuN linux-2.6.25-rc7.orig/arch/x86/kernel/machine_kexec_64.c linux-2.6.25-rc7/arch/x86/kernel/machine_kexec_64.c
>> --- linux-2.6.25-rc7.orig/arch/x86/kernel/machine_kexec_64.c 2008-03-26 14:55:29.000000000 +0900
>> +++ linux-2.6.25-rc7/arch/x86/kernel/machine_kexec_64.c 2008-03-26 14:52:52.000000000 +0900
>> @@ -233,6 +233,7 @@ NORET_TYPE void machine_kexec(struct kim
>> void arch_crash_save_vmcoreinfo(void)
>> + VMCOREINFO_SYMBOL(phys_base);
> CCing to LKML.
> Looks good to me. Given a vmcore file, one needs to know about
> the shift between compile address and run time address of kernel
> to be able to do filtering. This shift (phys_base) will vary
> based on kernel config options and based on where boot loader
> has loaded a kernel.
> Acked-by: Vivek Goyal <vgoyal at redhat.com>
Thank you so much for your review and "Acked-by" :-)
More information about the kexec