[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