linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Hari Bathini <hbathini@linux.vnet.ibm.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev <linuxppc-dev@ozlabs.org>,
	Mahesh J Salgaonkar <mahesh@linux.vnet.ibm.com>
Subject: Re: [PATCH v2] powerpc/fadump: set an upper limit for boot memory size
Date: Wed, 17 May 2017 17:40:16 +0530	[thread overview]
Message-ID: <72e3dcde-5730-59ed-a24d-b1bfc79a8b9a@linux.vnet.ibm.com> (raw)
In-Reply-To: <148793853573.16182.16113694193326906522.stgit@hbathini.in.ibm.com>

Hi Michael,


On Friday 24 February 2017 05:54 PM, Hari Bathini wrote:
> By default, 5% of system RAM is reserved for preserving boot memory.
> Alternatively, a user can specify the amount of memory to reserve.
> See Documentation/powerpc/firmware-assisted-dump.txt for details. In
> addition to the memory reserved for preserving boot memory, some more
> memory is reserved, to save HPTE region, CPU state data and ELF core
> headers.
>
> Memory Reservation during first kernel looks like below:
>
>    Low memory                                        Top of memory
>    0      boot memory size                                       |
>    |           |                       |<--Reserved dump area -->|
>    V           V                       |   Permanent Reservation V
>    +-----------+----------/ /----------+---+----+-----------+----+
>    |           |                       |CPU|HPTE|  DUMP     |ELF |
>    +-----------+----------/ /----------+---+----+-----------+----+
>          |                                           ^
>          |                                           |
>          \                                           /
>           -------------------------------------------
>            Boot memory content gets transferred to
>            reserved area by firmware at the time of
>            crash
>
> This implicitly means that the sum of the sizes of boot memory, CPU
> state data, HPTE region, DUMP preserving area and ELF core headers
> can't be greater than the total memory size. But currently, a user is
> allowed to specify any value as boot memory size. So, the above rule
> is violated when a boot memory size around 50% of the total available
> memory is specified. As the kernel is not handling this currently, it
> may lead to undefined behavior. Fix it by setting an upper limit for
> boot memory size to 25% of the total available memory. Also, instead
> of using memblock_end_of_DRAM(), which doesn't take the holes, if any,
> in the memory layout into account, use memblock_phys_mem_size() to
> calculate the percentage of total available memory.
>
> Signed-off-by: Hari Bathini <hbathini@linux.vnet.ibm.com>
> ---
>
> This patch is based on top of the patchset to reuse-crashkernel-parameter-
> for-fadump (http://patchwork.ozlabs.org/patch/711522).

The above mentioned patch-set is upstream.
Can you please review this patch.

Thanks
Hari

> Changes from v1:
> * Using memblock_phys_mem_size() instead of memblock_end_of_DRAM() to
>    get system RAM size.
>
>
>   arch/powerpc/include/asm/fadump.h |    3 +++
>   arch/powerpc/kernel/fadump.c      |   16 +++++++++++++++-
>   2 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/include/asm/fadump.h b/arch/powerpc/include/asm/fadump.h
> index 60b9108..a3de219 100644
> --- a/arch/powerpc/include/asm/fadump.h
> +++ b/arch/powerpc/include/asm/fadump.h
> @@ -43,6 +43,9 @@
>   #define MIN_BOOT_MEM	(((RMA_END < (0x1UL << 28)) ? (0x1UL << 28) : RMA_END) \
>   			+ (0x1UL << 26))
>
> +/* The upper limit percentage for user specified boot memory size (25%) */
> +#define MAX_BOOT_MEM_RATIO			4
> +
>   #define memblock_num_regions(memblock_type)	(memblock.memblock_type.cnt)
>
>   /* Firmware provided dump sections */
> diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
> index e013f8f..21d5404 100644
> --- a/arch/powerpc/kernel/fadump.c
> +++ b/arch/powerpc/kernel/fadump.c
> @@ -221,12 +221,26 @@ static inline unsigned long fadump_calculate_reserve_size(void)
>   	ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
>   				&size, &base);
>   	if (ret == 0 && size > 0) {
> +		unsigned long max_size;
> +
>   		fw_dump.reserve_bootvar = (unsigned long)size;
> +
> +		/*
> +		 * Adjust if the boot memory size specified is above
> +		 * the upper limit.
> +		 */
> +		max_size = memblock_phys_mem_size() / MAX_BOOT_MEM_RATIO;
> +		if (fw_dump.reserve_bootvar > max_size) {
> +			fw_dump.reserve_bootvar = max_size;
> +			pr_info("Adjusted boot memory size to %luMB\n",
> +				(fw_dump.reserve_bootvar >> 20));
> +		}
> +
>   		return fw_dump.reserve_bootvar;
>   	}
>
>   	/* divide by 20 to get 5% of value */
> -	size = memblock_end_of_DRAM() / 20;
> +	size = memblock_phys_mem_size() / 20;
>
>   	/* round it down in multiples of 256 */
>   	size = size & ~0x0FFFFFFFUL;
>

      reply	other threads:[~2017-05-17 12:11 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-24 12:24 [PATCH v2] powerpc/fadump: set an upper limit for boot memory size Hari Bathini
2017-05-17 12:10 ` Hari Bathini [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=72e3dcde-5730-59ed-a24d-b1bfc79a8b9a@linux.vnet.ibm.com \
    --to=hbathini@linux.vnet.ibm.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=mahesh@linux.vnet.ibm.com \
    --cc=mpe@ellerman.id.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).