[PATCH v2 1/3] powerpc/fadump: avoid duplicates in crash memory ranges
Michal Suchánek
msuchanek at suse.de
Sat May 13 01:00:47 AEST 2017
On Fri, 12 May 2017 00:52:47 +0530
Hari Bathini <hbathini at linux.vnet.ibm.com> wrote:
> fadump sets up crash memory ranges to be used for creating PT_LOAD
> program headers in elfcore header. Memory chunk RMA_START through
> boot memory area size is added as the first memory range because
> firmware, at the time of crash, moves this memory chunk to different
> location specified during fadump registration making it necessary to
> create a separate program header for it with the correct offset.
> This memory chunk is skipped while setting up the remaining memory
> ranges. But currently, there is possibility that some of this memory
> may have duplicate entries like when it is hot-removed and added
> again. Ensure that no two memory ranges represent the same memory.
>
> When 10 lmbs are hot-removed and then hot-plugged before registering
> fadump, here is how the program headers in /proc/vmcore exported by
> fadump look like
>
> without this change:
>
> Program Headers:
> Type Offset VirtAddr PhysAddr
> FileSiz MemSiz Flags Align
> NOTE 0x0000000000010000 0x0000000000000000
> 0x0000000000000000 0x0000000000001890 0x0000000000001890 0
> LOAD 0x0000000000021020 0xc000000000000000
> 0x0000000000000000 0x0000000080000000 0x0000000080000000 RWE 0
> LOAD 0x0000000080031020 0xc000000000000000
> 0x0000000000000000 0x0000000020000000 0x0000000020000000 RWE 0
> LOAD 0x00000000a0040000 0xc000000020000000
> 0x0000000020000000 0x0000000050000000 0x0000000050000000 RWE 0
> LOAD 0x00000000f0040000 0xc000000070000000
> 0x0000000070000000 0x0000000010000000 0x0000000010000000 RWE 0
> LOAD 0x0000000100040000 0xc000000100020000
> 0x0000000100020000 0x000000000ffe0000 0x000000000ffe0000 RWE 0
> LOAD 0x0000000110020000 0xc000000110000000
> 0x0000000110000000 0x00000000b0000000 0x00000000b0000000 RWE 0
> LOAD 0x00000001c0020000 0xc0000001c0000000
> 0x00000001c0000000 0x0000000080000000 0x0000000080000000 RWE 0
>
> and with this change:
>
> Program Headers:
> Type Offset VirtAddr PhysAddr
> FileSiz MemSiz Flags Align
> NOTE 0x0000000000010000 0x0000000000000000
> 0x0000000000000000 0x0000000000001890 0x0000000000001890 0
> LOAD 0x0000000000021020 0xc000000000000000
> 0x0000000000000000 0x0000000080000000 0x0000000080000000 RWE 0
> LOAD 0x0000000080030000 0xc000000100020000
> 0x0000000100020000 0x000000000ffe0000 0x000000000ffe0000 RWE 0
> LOAD 0x0000000090010000 0xc000000110000000
> 0x0000000110000000 0x0000000060000000 0x0000000060000000 RWE 0
> LOAD 0x00000000f0010000 0xc000000170000000
> 0x0000000170000000 0x00000000d0000000 0x00000000d0000000 RWE 0
>
>
> Signed-off-by: Hari Bathini <hbathini at linux.vnet.ibm.com>
> Reviewed-by: Mahesh J Salgaonkar <mahesh at linux.vnet.ibm.com>
> ---
>
> Changes since v1:
> * Changelog updated based on data from latest kerenl.
> * Updated comment with the assumption involved.
>
>
> arch/powerpc/kernel/fadump.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/arch/powerpc/kernel/fadump.c
> b/arch/powerpc/kernel/fadump.c index 466569e..e4e1a14 100644
> --- a/arch/powerpc/kernel/fadump.c
> +++ b/arch/powerpc/kernel/fadump.c
> @@ -831,8 +831,18 @@ static void
> fadump_setup_crash_memory_ranges(void) for_each_memblock(memory, reg)
> { start = (unsigned long long)reg->base;
> end = start + (unsigned long long)reg->size;
> - if (start == RMA_START && end >=
> fw_dump.boot_memory_size)
> - start = fw_dump.boot_memory_size;
> +
> + /*
> + * skip the first memory chunk that is already added
> (RMA_START
> + * through boot_memory_size). This logic needs a
> relook if and
> + * when RMA_START changes to a non-zero value.
> + */
BUILD_BUG_ON(RMA_START)?
Thanks
Michal
More information about the Linuxppc-dev
mailing list