[PATCH v6 08/10] of: reserved_mem: mark /reserved-memory entries with MEMBLOCK_NODUMP
Marek Szyprowski
m.szyprowski at samsung.com
Thu Sep 3 00:32:38 PDT 2026
On 02.09.2026 09:31, Wandun Chen wrote:
> From: Wandun Chen <chenwandun at lixiang.com>
>
> Mark non-dumpable reserved-memory regions with MEMBLOCK_NODUMP so
> kdump can omit them from the vmcore.
>
> The marking is guarded by CONFIG_CRASH_DUMP so non-kdump kernels do not
> pay the cost of splitting memblock.memory entries at NODUMP boundaries.
>
> Signed-off-by: Wandun Chen <chenwandun at lixiang.com>
> Tested-by: Meijing Zhao <zhaomeijing at lixiang.com>
Acked-by: Marek Szyprowski <m.szyprowski at samsung.com>
> ---
> drivers/of/fdt.c | 1 +
> drivers/of/of_private.h | 1 +
> drivers/of/of_reserved_mem.c | 15 +++++++++++++++
> 3 files changed, 17 insertions(+)
>
> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
> index a64afc3ded3d..286fd4db6312 100644
> --- a/drivers/of/fdt.c
> +++ b/drivers/of/fdt.c
> @@ -1285,6 +1285,7 @@ void __init unflatten_device_tree(void)
>
> /* Save the statically-placed regions in the reserved_mem array */
> fdt_scan_reserved_mem_late();
> + fdt_mark_reserve_mem_nodump();
>
> /* Populate an empty root node when bootloader doesn't provide one */
> if (!fdt) {
> diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
> index 0ae16da066e2..505735732c13 100644
> --- a/drivers/of/of_private.h
> +++ b/drivers/of/of_private.h
> @@ -187,6 +187,7 @@ static inline struct device_node *__of_get_dma_parent(const struct device_node *
>
> int fdt_scan_reserved_mem(void);
> void __init fdt_scan_reserved_mem_late(void);
> +void __init fdt_mark_reserve_mem_nodump(void);
>
> bool of_fdt_device_is_available(const void *blob, unsigned long node);
>
> diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
> index 8c9d6395d6a3..f29a07e8fb23 100644
> --- a/drivers/of/of_reserved_mem.c
> +++ b/drivers/of/of_reserved_mem.c
> @@ -677,6 +677,21 @@ static void __init fdt_init_reserved_mem_node(unsigned long node, const char *un
> reserved_mem_count++;
> }
>
> +void __init fdt_mark_reserve_mem_nodump(void)
> +{
> + struct reserved_mem *rmem;
> + int i;
> +
> + if (!IS_ENABLED(CONFIG_CRASH_DUMP))
> + return;
> +
> + for (i = 0; i < reserved_mem_count; i++) {
> + rmem = &reserved_mem[i];
> + if (rmem->size && !rmem->dumpable)
> + memblock_mark_nodump(rmem->base, rmem->size);
> + }
> +}
> +
> struct rmem_assigned_device {
> struct device *dev;
> struct reserved_mem *rmem;
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
More information about the linux-arm-kernel
mailing list