makedumpfile: get_max_mapnr() from ELF header problem

HATAYAMA Daisuke d.hatayama at jp.fujitsu.com
Wed Mar 12 00:15:41 EDT 2014


(2014/02/28 21:41), Michael Holzheu wrote:
> Hello Atsushi,
>
> On s390 we have the following little problem:
>
> We use hypervisor or stand-alone dump tools to create Linux system
> dumps. These tools do not know the kernel parameter line and dump the
> full physical memory.
>
> We use makedumpfile to filter those dumps.
>
> If a Linux system has specified the "mem=" parameter, the dump tools
> still dump the whole phypsical memory.
>
> Unfortunately in "get_max_mapnr()" makedumpfile uses the ELF header to
> get the maxmimum page frame number. Since this is not the correct value
> in our case makedumpfile fails to filter the dump.
>
> We get the following error on s390 with makedumpfile version 1.5.3:
>
> makedumpfile -c -d 31 vmcore dump.kdump
> cyclic buffer size has been changed: 22156083 => 22156032
> Excluding unnecessary pages        : [ 21 %] vtop_s390x: Address too big for the number of page table levels.
> readmem: Can't convert a virtual address(8000180104670) to physical address.
> readmem: type_addr: 0, addr:8000180104670, size:32768
> __exclude_unnecessary_pages: Can't read the buffer of struct page.
> Excluding unnecessary pages        : [ 23 %] vtop_s390x: Address too big for the number of page table levels. readmem: Can't convert a
> virtual address(8000180104670) to physical address. readmem: type_addr:
> 0, addr:8000180104670, size:327681.5.5 __exclude_unnecessary_pages:
> Can't read the buffer of struct page.
>
> Since version 1.5.4 makedumpfile seems to loop in __exclude_unnecessary_pages().
>
> We thought about several ways to fix this problem but have not found a
> good solution up to now.
>
> Do you have an idea how we could fix that?
>
> Best Regards,
> Michael
>

At least on x86, makedumpfile appears to work well for dumps generated by sadump and virsh dump. In particular, virsh dump --memory-only generates dump in ELF, whose PT_LOAD entries are generated from RAM list managed by qemu, not managed by kernel.

Looking into source code a little, max_mapnr is used only for calculating a size of two bitmaps. I guess there's any s390-specific issue.

-- 
Thanks.
HATAYAMA, Daisuke




More information about the kexec mailing list