v9 2026-10-22

kdump 跳过固件保留内存减小 vmcore · v9

引入MEMBLOCK_NODUMP标记让crash_core跳过不可转储区域,缩小vmcore并缩短捕获时间。

原始补丁链接

子 Patch(8)

1/8
riscv: build crash_mem ranges from memblock instead of resource tree
RISC-V 的 crash_mem 改用 for_each_mem_range() 从 memblock 构建,并为 CRASH_DUMP 选择 ARCH_KEEP_MEMBLOCK,保留 memblock 以排除 NODUMP 保留区。
2/8
crash_core: fold duplicated memblock arch hooks into the weak default
把 arm64/loongarch/riscv 重复的 arch_get_system_nr_ranges()/arch_crash_populate_cmem() memblock 遍历合并进 crash_core.c 的 __weak 默认实现,删除架构副本。
3/8
crash_core: serialize crash header preparation against hotplug
在 kexec_file_load() 准备 crash 头时持有 device_hotplug_lock,并直接调用 __crash_prepare_headers() 避免递归锁,防止热插拔改变范围致 cmem->ranges 溢出。
4/8
crash_core: replace for_each_mem_range() with for_each_mem_region()
弱默认实现改用 for_each_mem_region() 暴露 memblock_region 及 flags,并用新 crash_should_skip_region() 显式过滤 MEMBLOCK_NOMAP,替代隐式跳过。
5/8
memblock: introduce MEMBLOCK_NODUMP flag
新增 MEMBLOCK_NODUMP 标志及标记接口,用于把无需进入 kdump vmcore 的保留内存排除;CMA 等可复用区域不得标记,供 /reserved-memory 后续使用。
6/8
of: reserved_mem: add dumpable flag to opt-in vmcore
给 struct reserved_mem 增加 dumpable 字段,默认 false 表示设备保留区不进 vmcore;在 rmem_cma_setup() 中把可复用 CMA 设为 true,以免丢失分析数据。
7/8
of: reserved_mem: mark /reserved-memory entries with MEMBLOCK_NODUMP
解析 /reserved-memory 时把 dumpable=false 的区域标记 MEMBLOCK_NODUMP,且仅在 CRASH_DUMP 与 KEXEC_FILE/CRASH_HOTPLUG 下执行,避免无关内核拆分 memblock.memory。
8/8
crash_core: skip MEMBLOCK_NODUMP regions when building vmcore ELF header
crash_should_skip_region() 增加 MEMBLOCK_NODUMP 判断,构建 vmcore ELF 头时跳过 GPU/DSP 等保留区,减少 vmcore 体积和捕获时间。