public inbox for linuxppc-dev@ozlabs.org
 help / color / mirror / Atom feed
From: Jinjie Ruan <ruanjinjie@huawei.com>
To: Sourabh Jain <sourabhjain@linux.ibm.com>, <corbet@lwn.net>,
	<catalin.marinas@arm.com>, <will@kernel.org>,
	<chenhuacai@kernel.org>, <kernel@xen0n.name>,
	<maddy@linux.ibm.com>, <mpe@ellerman.id.au>, <npiggin@gmail.com>,
	<chleroy@kernel.org>, <pjw@kernel.org>, <palmer@dabbelt.com>,
	<aou@eecs.berkeley.edu>, <alex@ghiti.fr>, <tglx@kernel.org>,
	<mingo@redhat.com>, <bp@alien8.de>, <dave.hansen@linux.intel.com>,
	<hpa@zytor.com>, <akpm@linux-foundation.org>, <bhe@redhat.com>,
	<vgoyal@redhat.com>, <dyoung@redhat.com>,
	<pawan.kumar.gupta@linux.intel.com>,
	<feng.tang@linux.alibaba.com>, <kees@kernel.org>,
	<elver@google.com>, <arnd@arndb.de>, <lirongqing@baidu.com>,
	<fvdl@google.com>, <leitao@debian.org>, <rppt@kernel.org>,
	<cfsworks@gmail.com>, <osandov@fb.com>, <ardb@kernel.org>,
	<ryan.roberts@arm.com>, <tangyouling@kylinos.cn>,
	<ritesh.list@gmail.com>, <bjorn@rivosinc.com>,
	<songshuaishuai@tinylab.org>, <samuel.holland@sifive.com>,
	<kevin.brodsky@arm.com>, <junhui.liu@pigmoral.tech>,
	<vishal.moola@gmail.com>, <coxu@redhat.com>, <jbohac@suse.cz>,
	<liaoyuanhong@vivo.com>, <brgerst@gmail.com>,
	<fuqiang.wang@easystack.cn>, <x86@kernel.org>,
	<linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<loongarch@lists.linux.dev>, <linuxppc-dev@lists.ozlabs.org>,
	<linux-riscv@lists.infradead.org>, <kexec@lists.infradead.org>
Subject: Re: [PATCH v3 1/3] crash: Exclude crash kernel memory in crash core
Date: Thu, 5 Feb 2026 11:15:40 +0800	[thread overview]
Message-ID: <113f1d02-69df-b28e-edb9-514d284c6b29@huawei.com> (raw)
In-Reply-To: <4dc944c7-20ad-4e92-b05e-28a9e0c5a2b8@linux.ibm.com>



On 2026/2/4 20:32, Sourabh Jain wrote:
> 
> 
> On 04/02/26 15:07, Jinjie Ruan wrote:
>> The exclude of crashk_res, crashk_low_res and crashk_cma memory
>> are almost identical across different architectures, so handling them
>> in the crash core would eliminate a lot of duplication, so do
>> them in the common code.
>>
>> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
>> ---
>>   arch/arm64/kernel/machine_kexec_file.c     | 12 -------
>>   arch/loongarch/kernel/machine_kexec_file.c | 12 -------
>>   arch/powerpc/kexec/ranges.c                | 16 ++-------
>>   arch/riscv/kernel/machine_kexec_file.c     |  5 +--
>>   arch/x86/kernel/crash.c                    | 39 ++--------------------
>>   kernel/crash_core.c                        | 28 ++++++++++++++++
>>   6 files changed, 34 insertions(+), 78 deletions(-)
>>

[...]

>> -static int crash_exclude_mem_range_guarded(struct crash_mem
>> **mem_ranges,
>> -                       unsigned long long mstart,
>> -                       unsigned long long mend)
>> +static int crash_realloc_mem_range_guarded(struct crash_mem
>> **mem_ranges)
>>   {
>>       struct crash_mem *tmem = *mem_ranges;
>>   @@ -566,7 +564,7 @@ static int
>> crash_exclude_mem_range_guarded(struct crash_mem **mem_ranges,
>>               return -ENOMEM;
>>       }
>>   -    return crash_exclude_mem_range(tmem, mstart, mend);
>> +    return 0;
>>   }
>>     /**
>> @@ -604,18 +602,10 @@ int get_crash_memory_ranges(struct crash_mem
>> **mem_ranges)
>>               sort_memory_ranges(*mem_ranges, true);
>>       }
>>   -    /* Exclude crashkernel region */
>> -    ret = crash_exclude_mem_range_guarded(mem_ranges,
>> crashk_res.start, crashk_res.end);
>> +    ret = crash_realloc_mem_range_guarded(mem_ranges);
> 
> What if max_nr_ranges - nr_ranges = 1, then no realloc will happen here.
> And in
> elf_header_exclude_ranges we may not enough space to store additional
> memory ranges needed while excluding one or more CMA ranges.

You're absolutely right — if max_nr_ranges - nr_ranges == 1 we skip the
realloc, yet elf_header_exclude_ranges() can easily need more than one
extra slot.

Thanks for catching this.
Jinjie

> 
>>       if (ret)
>>           goto out;
>>   -    for (i = 0; i < crashk_cma_cnt; ++i) {
>> -        ret = crash_exclude_mem_range_guarded(mem_ranges,
>> crashk_cma_ranges[i].start,
>> -                          crashk_cma_ranges[i].end);
>> -        if (ret)
>> -            goto out;
>> -    }
>> -
>>       /*
>>        * FIXME: For now, stay in parity with kexec-tools but if RTAS/OPAL
>>        *        regions are exported to save their context at the time of

[...]

>>   +static int crash_exclude_mem_ranges(struct crash_mem *cmem)
>> +{
>> +    int ret, i;
>> +
>> +    /* Exclude crashkernel region */
>> +    ret = crash_exclude_mem_range(cmem, crashk_res.start,
>> crashk_res.end);
>> +    if (ret)
>> +        return ret;
>> +
>> +    if (crashk_low_res.end) {
>> +        ret = crash_exclude_mem_range(cmem, crashk_low_res.start,
>> crashk_low_res.end);
>> +        if (ret)
>> +            return ret;
>> +    }
>>   +    for (i = 0; i < crashk_cma_cnt; ++i) {
>> +        ret = crash_exclude_mem_range(cmem, crashk_cma_ranges[i].start,
>> +                          crashk_cma_ranges[i].end);
>> +        if (ret)
>> +            return ret;
>> +    }
>>   +    return ret;
>> +}
>>     int crash_prepare_elf64_headers(struct crash_mem *mem, int
>> need_kernel_map,
>>                 void **addr, unsigned long *sz)
>> @@ -174,6 +197,11 @@ int crash_prepare_elf64_headers(struct crash_mem
>> *mem, int need_kernel_map,
>>       unsigned int cpu, i;
>>       unsigned long long notes_addr;
>>       unsigned long mstart, mend;
>> +    int ret;
>> +
>> +    ret = crash_exclude_mem_ranges(mem);
> 
> I think the assumption here is that mem should have enough space
> to hold the extra ranges created while excluding crash memory ranges.
> Right now, this is not happening on powerpc for the case I mentioned
> in the above comment.

Yes, as you mentioned above.

> 
> Also, if crashk_cma_cnt changes in the future, or if a new type of
> crash memory is added, then every architecture would need to adjust
> the mem allocation accordingly. Instead, could we handle this in
> generic code rather than in architecture-specific code, so that we
> always ensure mem has enough space?

I agree — hard-coding the worst-case count in every arch is a
maintenance trap.
Let's move the size calculation (and the realloc if needed) into the
generic crash core so that:

- New CMA regions or future crash-memory types are automatically
accounted for;

- Each architecture no longer has to play whack-a-mole with its private
array size.

Thanks for the suggestion.

> 
>> +    if (ret)
>> +        return ret;
>>         /* extra phdr for vmcoreinfo ELF note */
>>       nr_phdr = nr_cpus + 1;
> 


  reply	other threads:[~2026-02-05  3:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-04  9:37 [PATCH v3 0/3] arm64/riscv: Add support for crashkernel CMA reservation Jinjie Ruan
2026-02-04  9:37 ` [PATCH v3 1/3] crash: Exclude crash kernel memory in crash core Jinjie Ruan
2026-02-04 12:32   ` Sourabh Jain
2026-02-05  3:15     ` Jinjie Ruan [this message]
2026-02-04  9:37 ` [PATCH v3 2/3] arm64: kexec: Add support for crashkernel CMA reservation Jinjie Ruan
2026-02-04  9:37 ` [PATCH v3 3/3] riscv: " Jinjie Ruan

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=113f1d02-69df-b28e-edb9-514d284c6b29@huawei.com \
    --to=ruanjinjie@huawei.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=bhe@redhat.com \
    --cc=bjorn@rivosinc.com \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=catalin.marinas@arm.com \
    --cc=cfsworks@gmail.com \
    --cc=chenhuacai@kernel.org \
    --cc=chleroy@kernel.org \
    --cc=corbet@lwn.net \
    --cc=coxu@redhat.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dyoung@redhat.com \
    --cc=elver@google.com \
    --cc=feng.tang@linux.alibaba.com \
    --cc=fuqiang.wang@easystack.cn \
    --cc=fvdl@google.com \
    --cc=hpa@zytor.com \
    --cc=jbohac@suse.cz \
    --cc=junhui.liu@pigmoral.tech \
    --cc=kees@kernel.org \
    --cc=kernel@xen0n.name \
    --cc=kevin.brodsky@arm.com \
    --cc=kexec@lists.infradead.org \
    --cc=leitao@debian.org \
    --cc=liaoyuanhong@vivo.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lirongqing@baidu.com \
    --cc=loongarch@lists.linux.dev \
    --cc=maddy@linux.ibm.com \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    --cc=osandov@fb.com \
    --cc=palmer@dabbelt.com \
    --cc=pawan.kumar.gupta@linux.intel.com \
    --cc=pjw@kernel.org \
    --cc=ritesh.list@gmail.com \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=samuel.holland@sifive.com \
    --cc=songshuaishuai@tinylab.org \
    --cc=sourabhjain@linux.ibm.com \
    --cc=tangyouling@kylinos.cn \
    --cc=tglx@kernel.org \
    --cc=vgoyal@redhat.com \
    --cc=vishal.moola@gmail.com \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    /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