[PATCH v4 00/10] kdump: reduce vmcore size and capture time
Wandun Chen <[email protected]>
| Newsgroups | org.infradead.lists.kexec,dev.linux.lists.iommu,dev.linux.lists.loongarch,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-riscv,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Wandun Chen <[email protected]> On SoCs that carve out large firmware-owned reserved memory (GPU firmware, DSP, modem, camera ISP, NPU, ...), kdump currently dumps those carveouts as part of system RAM even though their contents are firmware state that is not useful for kernel crash analysis. This series introduces an opt-in 'dumpable' flag [1] on struct reserved_mem and uses it to filter the elfcorehdr PT_LOAD ranges on DT-based architectures (arm64, riscv, loongarch). By default reserved regions are treated as non-dumpable; CMA regions are explicitly opted in because their pages are returned to the buddy allocator and may carry key crash-analysis data. Since the reserved memory regions are filtered out, the vmcore is smaller in size and faster to produce. The reserved memory has already been filtered out in x86; the optimizations in this series apply to systems that use DTS such as arm64/riscv/loongarch. The series is organized as follows: Patches 1-4: Small prepare changes and cleanups. Patches 5: Add dumpable flag to opt-in vmcore. Patches 6: Append /memreserve/ entries into reserved_mem[]. Patch 7: Add generic kdump helpers. Patches 8-10: Wire the helpers into arm64, riscv and loongarch kdump elfcorehdr preparation. v3 --> v4: 1. Rebase this series on v7.2-rc1. 2. Add two cleanup patches (patch 02/03). 3. Simplify patch 03 to avoid checking whether initial_boot_params is NULL multiple times, suggested by Rob. v2 --> v3: 1. Fix out-of-bounds issue if device tree lacks /reserved-memory node.[2] 2. Fix UAF issue when alloc_reserved_mem_array() fails. 3. Add some prepare patches. v1 --> v2: 1. v1 added an opt-out DT property ('linux,no-dump'). Per Rob's feedback [1], v2 drop that property and exclude reserve memory by default. 2. Split some prepared patches from the original patches. 3. Address coding-style comments on patch 5 from Rob. [1] https://lore.kernel.org/lkml/[email protected]/ [2] https://sashiko.dev/#/patchset/20260520091844.592753-1-chenwandun%40lixiang.com?part=4 Wandun Chen (10): kexec/crash: provide crash_exclude_mem_range() stub when CONFIG_CRASH_DUMP=n of: reserved_mem: dedup and relocate reserved-memory messages of: reserved_mem: skip late scan when no regions are reserved of: reserved_mem: split alloc_reserved_mem_array() from fdt_scan_reserved_mem_late() of: reserved_mem: add dumpable flag to opt-in vmcore of: reserved_mem: save /memreserve/ entries into the reserved_mem array of: reserved_mem: add kdump helpers to exclude non-dumpable regions arm64: kdump: exclude non-dumpable reserved memory regions from vmcore riscv: kdump: exclude non-dumpable reserved memory regions from vmcore loongarch: kdump: exclude non-dumpable reserved memory regions from vmcore arch/arm64/kernel/machine_kexec_file.c | 6 ++ arch/loongarch/kernel/machine_kexec_file.c | 6 ++ arch/riscv/kernel/machine_kexec_file.c | 4 + drivers/of/fdt.c | 11 ++- drivers/of/of_private.h | 3 + drivers/of/of_reserved_mem.c | 108 ++++++++++++++++++--- include/linux/crash_core.h | 6 ++ include/linux/of_reserved_mem.h | 15 +++ kernel/dma/contiguous.c | 1 + 9 files changed, 142 insertions(+), 18 deletions(-) -- 2.43.0