Commit 9cf3b3a3 authored by Hari Bathini's avatar Hari Bathini Committed by Michael Ellerman

powerpc/fadump: align destination address to pagesize

On crash, boot memory area is copied to a destination address by f/w.
This region is setup as separate PT_LOAD segment with appropriate
offset to handle the different physical address and offset in vmcore.
If this destination address is not page aligned, reading the vmcore
with mmap is likely to fail forcing tools like makedumpfile to fall
back to regular read. Avoid mmap read failure by ensuring that the
destination address is always page aligned.
Signed-off-by: default avatarHari Bathini <hbathini@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220406093839.206608-3-hbathini@linux.ibm.com
parent 15eb77f8
...@@ -365,6 +365,11 @@ static unsigned long __init get_fadump_area_size(void) ...@@ -365,6 +365,11 @@ static unsigned long __init get_fadump_area_size(void)
size += fw_dump.cpu_state_data_size; size += fw_dump.cpu_state_data_size;
size += fw_dump.hpte_region_size; size += fw_dump.hpte_region_size;
/*
* Account for pagesize alignment of boot memory area destination address.
* This faciliates in mmap reading of first kernel's memory.
*/
size = PAGE_ALIGN(size);
size += fw_dump.boot_memory_size; size += fw_dump.boot_memory_size;
size += sizeof(struct fadump_crash_info_header); size += sizeof(struct fadump_crash_info_header);
size += sizeof(struct elfhdr); /* ELF core header.*/ size += sizeof(struct elfhdr); /* ELF core header.*/
......
...@@ -108,6 +108,12 @@ static u64 rtas_fadump_init_mem_struct(struct fw_dump *fadump_conf) ...@@ -108,6 +108,12 @@ static u64 rtas_fadump_init_mem_struct(struct fw_dump *fadump_conf)
fdm.hpte_region.destination_address = cpu_to_be64(addr); fdm.hpte_region.destination_address = cpu_to_be64(addr);
addr += fadump_conf->hpte_region_size; addr += fadump_conf->hpte_region_size;
/*
* Align boot memory area destination address to page boundary to
* be able to mmap read this area in the vmcore.
*/
addr = PAGE_ALIGN(addr);
/* RMA region section */ /* RMA region section */
fdm.rmr_region.request_flag = cpu_to_be32(RTAS_FADUMP_REQUEST_FLAG); fdm.rmr_region.request_flag = cpu_to_be32(RTAS_FADUMP_REQUEST_FLAG);
fdm.rmr_region.source_data_type = fdm.rmr_region.source_data_type =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment