Subject: Re: [PATCH v5] powerpc/kdump: Add support for crashkernel CMA reservation

From: Ritesh Harjani (IBM) <[email-masked]>
Date: Tue, 04 Nov 2025 15:54:44 +0530

Sourabh Jain <[email-masked]> writes:

> On 04/11/25 10:48, Sourabh Jain wrote:
>>
>>
>> On 03/11/25 15:40, Ritesh Harjani (IBM) wrote:
>>> Sourabh Jain <[email-masked]> writes:
>>>
>>>> Commit 35c18f2933c5 ("Add a new optional ",cma" suffix to the
>>>> crashkernel= command line option") and commit ab475510e042 ("kdump:
>>>> implement reserve_crashkernel_cma") added CMA support for kdump
>>>> crashkernel reservation.
>>>>
>>>> Extend crashkernel CMA reservation support to powerpc.
>>>>
>>>> The following changes are made to enable CMA reservation on powerpc:
>>>>
>>>> - Parse and obtain the CMA reservation size along with other 
>>>> crashkernel
>>>>    parameters
>>>> - Call reserve_crashkernel_cma() to allocate the CMA region for kdump
>>>> - Include the CMA-reserved ranges in the usable memory ranges for the
>>>>    kdump kernel to use.
>>>> - Exclude the CMA-reserved ranges from the crash kernel memory to
>>>>    prevent them from being exported through /proc/vmcore.
>>>>
>>>> With the introduction of the CMA crashkernel regions,
>>>> crash_exclude_mem_range() needs to be called multiple times to exclude
>>>> both crashk_res and crashk_cma_ranges from the crash memory ranges. To
>>>> avoid repetitive logic for validating mem_ranges size and handling
>>>> reallocation when required, this functionality is moved to a new 
>>>> wrapper
>>>> function crash_exclude_mem_range_guarded().
>>>>
>>>> To ensure proper CMA reservation, reserve_crashkernel_cma() is called
>>>> after pageblock_order is initialized.
>>>>
>>>> Update kernel-parameters.txt to document CMA support for crashkernel on
>>>> powerpc architecture.
>>>>
>>>> Cc: Baoquan he <[email-masked]>
>>>> Cc: Jiri Bohac <[email-masked]>
>>>> Cc: Hari Bathini <[email-masked]>
>>>> Cc: Madhavan Srinivasan <[email-masked]>
>>>> Cc: Mahesh Salgaonkar <[email-masked]>
>>>> Cc: Michael Ellerman <[email-masked]>
>>>> Cc: Ritesh Harjani (IBM) <[email-masked]>
>>>> Cc: Shivang Upadhyay <[email-masked]>
>>>> Cc: [email-masked]
>>>> Signed-off-by: Sourabh Jain <[email-masked]>
>>>> ---
>>>> Changlog:
>>>>
>>>> v3 -> v4
>>>>   - Removed repeated initialization to tmem in
>>>>     crash_exclude_mem_range_guarded()
>>>>   - Call crash_exclude_mem_range() with right crashk ranges
>>>>
>>>> v4 -> v5:
>>>>   - Document CMA-based crashkernel support for ppc64 in 
>>>> kernel-parameters.txt
>>>> ---
>>>>   .../admin-guide/kernel-parameters.txt         |  2 +-
>>>>   arch/powerpc/include/asm/kexec.h              |  2 +
>>>>   arch/powerpc/kernel/setup-common.c            |  4 +-
>>>>   arch/powerpc/kexec/core.c                     | 10 ++++-
>>>>   arch/powerpc/kexec/ranges.c                   | 43 
>>>> ++++++++++++++-----
>>>>   5 files changed, 47 insertions(+), 14 deletions(-)
>>>>
>>>> diff --git a/Documentation/admin-guide/kernel-parameters.txt 
>>>> b/Documentation/admin-guide/kernel-parameters.txt
>>>> index 6c42061ca20e..0f386b546cec 100644
>>>> --- a/Documentation/admin-guide/kernel-parameters.txt
>>>> +++ b/Documentation/admin-guide/kernel-parameters.txt
>>>> @@ -1013,7 +1013,7 @@
>>>>               It will be ignored when crashkernel=X,high is not used
>>>>               or memory reserved is below 4G.
>>>>       crashkernel=size[KMG],cma
>>>> -            [KNL, X86] Reserve additional crash kernel memory from
>>>> +            [KNL, X86, ppc64] Reserve additional crash kernel 
>>>> memory from
>>> Shouldn't this be PPC and not ppc64?
>>>
>>> If I see the crash_dump support...
>>>
>>> config ARCH_SUPPORTS_CRASH_DUMP
>>>     def_bool PPC64 || PPC_BOOK3S_32 || PPC_85xx || (44x && !SMP)
>>>
>>> The changes below aren't specific to ppc64 correct?
>>
>> The thing is this feature is only supported with KEXEC_FILE and which 
>> only supported on PPC64:
>>
>> config ARCH_SUPPORTS_KEXEC_FILE
>>     def_bool PPC64
>>
>> Hence I kept it as ppc64.
>>

I am not much familiar with the kexec_load v/s kexec_file_load
internals. Maybe because of that I am unable to clearly understand your
above points.

But let me try and explain what I think you meant :)

We first call "get_usable_memory_ranges(&umem)" which updates the usable
memory ranges in "umem". We then call "update_usable_mem_fdt(fdt, umem)"
which updates the FDT for the kdump kernel's fdt to inform about these
usable memory ranges to the kdump kernel.

Now since your patch only does that in get_usable_memory_range(), this
extra CMA reservation is mainly only useful when the kdump load happens
via kexec_file_load(), (because get_usable_memory_range() only gets
called from kexec_file_load() path)

Is this what you meant here?

>> I think I should update that in the commit message.
>>
>> Also do you think is it good to restrict this feature to KEXEC_FILE?
>
> Putting this under KEXEC_FILE may not help much because KEXEC_FILE is 
> enabled
> by default in most configurations. Once it is enabled, the CMA 
> reservation will
> happen regardless of which system call is used to load the kdump kernel
> (kexec_load or kexec_file_load).
>

What I understood from the feature was that, on the normal production
kernel this feature crashkernel=xM,cma allows to reserve an extra xMB of
memory as a CMA region for kdump kernel's memory allocations. But this
CMA reservation would happen in the normal kernel itself during
setup_arch() -> kdump_cma_reserve().. 

And this CMA reservation happens irrespective of whether the kdump
kernel will get loaded via whichever system call.

> However, not restricting this feature to KEXEC_FILE will allow the kexec 
> tool to
> independently add support for this feature in the future for the kexec_load
> system call.

Sure.

>
> With that logic, I think if we do not restrict this feature to 
> KEXEC_FILE, the support
> will be available for ppc and not limited to ppc64.
>

Yes, that make sense.

If one doesn't want to make the CMA reservation, then we need not pass
the extra cmdline argument and no reservation will be made. So, no need
to restrict this to PPC64 by making it available only for KEXEC_FILE.

-ritesh