• Mahesh Salgaonkar's avatar
    fadump: Initialize elfcore header and add PT_LOAD program headers. · 2df173d9
    Mahesh Salgaonkar authored
    Build the crash memory range list by traversing through system memory during
    the first kernel before we register for firmware-assisted dump. After the
    successful dump registration, initialize the elfcore header and populate
    PT_LOAD program headers with crash memory ranges. The elfcore header is
    saved in the scratch area within the reserved memory. The scratch area starts
    at the end of the memory reserved for saving RMR region contents. The
    scratch area contains fadump crash info structure that contains magic number
    for fadump validation and physical address where the eflcore header can be
    found. This structure will also be used to pass some important crash info
    data to the second kernel which will help second kernel to populate ELF core
    header with correct data before it gets exported through /proc/vmcore. Since
    the firmware preserves the entire partition memory at the time of crash the
    contents of the scratch area will be preserved till second kernel boot.
    
    Since the memory dump exported through /proc/vmcore is in ELF format similar
    to kdump, it will help us to reuse the kdump infrastructure for dump capture
    and filtering. Unlike phyp dump, userspace tool does not need to refer any
    sysfs interface while reading /proc/vmcore.
    
    NOTE: The current design implementation does not address a possibility of
    introducing additional fields (in future) to this structure without affecting
    compatibility. It's on TODO list to come up with better approach to
    address this.
    
    Reserved dump area start => +-------------------------------------+
                                |  CPU state dump data                |
                                +-------------------------------------+
                                |  HPTE region data                   |
                                +-------------------------------------+
                                |  RMR region data                    |
    Scratch area start       => +-------------------------------------+
                                |  fadump crash info structure {      |
                                |     magic nummber                   |
                         +------|---- elfcorehdr_addr                 |
                         |      |  }                                  |
                         +----> +-------------------------------------+
                                |  ELF core header                    |
    Reserved dump area end   => +-------------------------------------+
    Signed-off-by: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    2df173d9
fadump.c 22.3 KB