Re: [PATCH 3/3] powerpc: Set crashkernel offset to mid of RMA region

From: Sourabh Jain
Date: Tue Oct 05 2021 - 04:15:01 EST



On 04/10/21 21:36, Aneesh Kumar K.V wrote:
On 10/4/21 20:41, Sourabh Jain wrote:
On large config LPARs (having 192 and more cores), Linux fails to boot
due to insufficient memory in the first memory block. It is due to the
reserve crashkernel area starts at 128MB offset by default and which
doesn't leave enough space in the first memory block to accommodate
memory for other essential system resources.

Given that the RMA region size can be 512MB or more, setting the
crashkernel offset to mid of RMA size will leave enough space to
kernel to allocate memory for other system resources in the first
memory block.

Signed-off-by: Sourabh Jain <sourabhjain@xxxxxxxxxxxxx>
Reported-and-tested-by: Abdul haleem <abdhalee@xxxxxxxxxxxxxxxxxx>
---
  arch/powerpc/kernel/rtas.c |  3 +++
  arch/powerpc/kexec/core.c  | 13 +++++++++----
  2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index ff80bbad22a5..ce5e62bb4d8e 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -1235,6 +1235,9 @@ int __init early_init_dt_scan_rtas(unsigned long node,
      entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL);
      sizep  = of_get_flat_dt_prop(node, "rtas-size", NULL);
  +    if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL))
+        powerpc_firmware_features |= FW_FEATURE_LPAR;
+

The equivalent check that we currently do more than checking ibm,hypertas-functions.

    if (!strcmp(uname, "rtas") || !strcmp(uname, "rtas@0")) {
        prop = of_get_flat_dt_prop(node, "ibm,hypertas-functions",
                       &len);
        if (prop) {
            powerpc_firmware_features |= FW_FEATURE_LPAR;
            fw_hypertas_feature_init(prop, len);
        }


also do we expect other firmware features to be set along with FW_FEATURE_LPAR?

This patch needs to move crash kernel reservation to mid point of rma size for LPAR in reserve_crashkernel() function. Since reserve_crashkernel() is called too early even before powerpc_firmware_features is set with FW_FEATURE_LPAR, the check for if (firmware_has_feature(FW_FEATURE_LPAR)) fails and hence we only need to make sure that we set this flag early during early_init_dt_scan_rtas().

The rest of the LPAR specific initialization isn't required at this point and will be still done during pseries_probe_fw_features() as usual.

Thanks,
Sourabh Jain