mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 02:56:02 +02:00
riscv: kexec_file: Add support for crashkernel CMA reservation
Commit35c18f2933("Add a new optional ",cma" suffix to the crashkernel= command line option") and commitab475510e0("kdump: implement reserve_crashkernel_cma") added CMA support for kdump crashkernel reservation. This allows the kernel to dynamically allocate contiguous memory for crash dumping when needed, rather than permanently reserving a fixed region at boot time. So extend crashkernel CMA reservation support to riscv. The following changes are made to enable CMA reservation: - 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 for kdump kernel to use, which was already done in of_kexec_alloc_and_setup_fdt(). - Exclude the CMA-reserved ranges from the crash kernel memory to prevent them from being exported through /proc/vmcore, which was already done in the crash core. Update kernel-parameters.txt to document CMA support for crashkernel on riscv architecture. Cc: Paul Walmsley <pjw@kernel.org> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Alexandre Ghiti <alex@ghiti.fr> Acked-by: Baoquan He <bhe@redhat.com> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Acked-by: Paul Walmsley <pjw@kernel.org> # arch/riscv Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com> Link: https://patch.msgid.link/20260629094746.191843-11-ruanjinjie@huawei.com Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
This commit is contained in:
parent
c12c63d05d
commit
a037fe3c58
|
|
@ -1089,14 +1089,14 @@ Kernel parameters
|
|||
It will be ignored when crashkernel=X,high is not used
|
||||
or memory reserved is below 4G.
|
||||
crashkernel=size[KMG],cma
|
||||
[KNL, X86, ARM64, PPC] Reserve additional crash kernel memory from
|
||||
CMA. This reservation is usable by the first system's
|
||||
userspace memory and kernel movable allocations (memory
|
||||
balloon, zswap). Pages allocated from this memory range
|
||||
will not be included in the vmcore so this should not
|
||||
be used if dumping of userspace memory is intended and
|
||||
it has to be expected that some movable kernel pages
|
||||
may be missing from the dump.
|
||||
[KNL, X86, ARM64, RISCV, PPC] Reserve additional crash
|
||||
kernel memory from CMA. This reservation is usable by
|
||||
the first system's userspace memory and kernel movable
|
||||
allocations (memory balloon, zswap). Pages allocated
|
||||
from this memory range will not be included in the vmcore
|
||||
so this should not be used if dumping of userspace memory
|
||||
is intended and it has to be expected that some movable
|
||||
kernel pages may be missing from the dump.
|
||||
|
||||
A standard crashkernel reservation, as described above,
|
||||
is still needed to hold the crash kernel and initrd.
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ static int get_nr_ram_ranges_callback(struct resource *res, void *arg)
|
|||
|
||||
unsigned int arch_get_system_nr_ranges(void)
|
||||
{
|
||||
unsigned int nr_ranges = 2; /* For exclusion of crashkernel region */
|
||||
unsigned int nr_ranges = 2 + crashk_cma_cnt; /* For exclusion of crashkernel region */
|
||||
|
||||
walk_system_ram_res(0, -1, &nr_ranges, get_nr_ram_ranges_callback);
|
||||
|
||||
|
|
|
|||
|
|
@ -1320,7 +1320,7 @@ static inline void setup_vm_final(void)
|
|||
*/
|
||||
static void __init arch_reserve_crashkernel(void)
|
||||
{
|
||||
unsigned long long low_size = 0;
|
||||
unsigned long long low_size = 0, cma_size = 0;
|
||||
unsigned long long crash_base, crash_size;
|
||||
bool high = false;
|
||||
int ret;
|
||||
|
|
@ -1330,11 +1330,12 @@ static void __init arch_reserve_crashkernel(void)
|
|||
|
||||
ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
|
||||
&crash_size, &crash_base,
|
||||
&low_size, NULL, &high);
|
||||
&low_size, &cma_size, &high);
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
reserve_crashkernel_generic(crash_size, crash_base, low_size, high);
|
||||
reserve_crashkernel_cma(cma_size);
|
||||
}
|
||||
|
||||
void __init paging_init(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user