kho/abi: add memblock ABI header

Introduce KHO ABI header describing preservation ABI for memblock's
reserve_mem regions and link the relevant documentation to KHO docs.

[lukas.bulwahn@redhat.com: MAINTAINERS: adjust file entry in MEMBLOCK AND MEMORY MANAGEMENT INITIALIZATION]
  Link: https://lkml.kernel.org/r/20260107090438.22901-1-lukas.bulwahn@redhat.com
[rppt@kernel.org: update reserved_mem node description, per Pratyush]
  Link: https://lkml.kernel.org/r/aW_M-HYZzx5SkbnZ@kernel.org
Link: https://lkml.kernel.org/r/20260105165839.285270-7-rppt@kernel.org
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
Cc: Alexander Graf <graf@amazon.com>
Cc: Jason Miu <jasonmiu@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Mike Rapoport (Microsoft)
2026-01-05 18:58:39 +02:00
committed by Andrew Morton
parent ac2d8102c4
commit dd1e79ef6c
6 changed files with 81 additions and 83 deletions

View File

@@ -16,6 +16,12 @@ vmalloc preservation ABI
.. kernel-doc:: include/linux/kho/abi/kexec_handover.h
:doc: Kexec Handover ABI for vmalloc Preservation
memblock preservation ABI
=========================
.. kernel-doc:: include/linux/kho/abi/memblock.h
:doc: memblock kexec handover ABI
See Also
========

View File

@@ -1,39 +0,0 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
title: Memblock reserved memory
maintainers:
- Mike Rapoport <rppt@kernel.org>
description: |
Memblock can serialize its current memory reservations created with
reserve_mem command line option across kexec through KHO.
The post-KHO kernel can then consume these reservations and they are
guaranteed to have the same physical address.
properties:
compatible:
enum:
- reserve-mem-v1
patternProperties:
"$[0-9a-f_]+^":
$ref: reserve-mem.yaml#
description: reserved memory regions
required:
- compatible
additionalProperties: false
examples:
- |
memblock {
compatible = "memblock-v1";
n1 {
compatible = "reserve-mem-v1";
start = <0xc06b 0x4000000>;
size = <0x04 0x00>;
};
};

View File

@@ -1,40 +0,0 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
title: Memblock reserved memory regions
maintainers:
- Mike Rapoport <rppt@kernel.org>
description: |
Memblock can serialize its current memory reservations created with
reserve_mem command line option across kexec through KHO.
This object describes each such region.
properties:
compatible:
enum:
- reserve-mem-v1
start:
description: |
physical address (u64) of the reserved memory region.
size:
description: |
size (u64) of the reserved memory region.
required:
- compatible
- start
- size
additionalProperties: false
examples:
- |
n1 {
compatible = "reserve-mem-v1";
start = <0xc06b 0x4000000>;
size = <0x04 0x00>;
};

View File

@@ -16396,7 +16396,7 @@ S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock.git for-next
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock.git fixes
F: Documentation/core-api/boot-time-mm.rst
F: Documentation/core-api/kho/bindings/memblock/*
F: include/linux/kho/abi/memblock.h
F: include/linux/memblock.h
F: mm/bootmem_info.c
F: mm/memblock.c

View File

@@ -0,0 +1,73 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_KHO_ABI_MEMBLOCK_H
#define _LINUX_KHO_ABI_MEMBLOCK_H
/**
* DOC: memblock kexec handover ABI
*
* Memblock can serialize its current memory reservations created with
* reserve_mem command line option across kexec through KHO.
* The post-KHO kernel can then consume these reservations and they are
* guaranteed to have the same physical address.
*
* The state is serialized using Flattened Device Tree (FDT) format. Any
* modification to the FDT structure, node properties, or the compatible
* strings constitutes a breaking change. Such changes require incrementing the
* version number in the relevant `_COMPATIBLE` string to prevent a new kernel
* from misinterpreting data from an old kernel.
*
* Changes are allowed provided the compatibility version is incremented.
* However, backward/forward compatibility is only guaranteed for kernels
* supporting the same ABI version.
*
* FDT Structure Overview:
* The entire memblock state is encapsulated within a single KHO entry named
* "memblock".
* This entry contains an FDT with the following layout:
*
* .. code-block:: none
*
* / {
* compatible = "memblock-v1";
*
* n1 {
* compatible = "reserve-mem-v1";
* start = <0xc06b 0x4000000>;
* size = <0x04 0x00>;
* };
* };
*
* Main memblock node (/):
*
* - compatible: "memblock-v1"
* Identifies the overall memblock ABI version.
*
* reserved_mem node:
* These nodes describe all reserve_mem regions. The node name is the name
* defined by the user for a reserve_mem region.
*
* - compatible: "reserve-mem-v1"
*
* Identifies the ABI version of reserve_mem descriptions
*
* - start: u64
*
* Physical address of the reserved memory region.
*
* - size: u64
*
* size in bytes of the reserved memory region.
*/
/* Top level memblock FDT node name. */
#define MEMBLOCK_KHO_FDT "memblock"
/* The compatible string for the memblock FDT root node. */
#define MEMBLOCK_KHO_NODE_COMPATIBLE "memblock-v1"
/* The compatible string for the reserve_mem FDT nodes. */
#define RESERVE_MEM_KHO_NODE_COMPATIBLE "reserve-mem-v1"
#endif /* _LINUX_KHO_ABI_MEMBLOCK_H */

View File

@@ -21,6 +21,7 @@
#ifdef CONFIG_KEXEC_HANDOVER
#include <linux/libfdt.h>
#include <linux/kexec_handover.h>
#include <linux/kho/abi/memblock.h>
#endif /* CONFIG_KEXEC_HANDOVER */
#include <asm/sections.h>
@@ -2442,9 +2443,6 @@ int reserve_mem_release_by_name(const char *name)
}
#ifdef CONFIG_KEXEC_HANDOVER
#define MEMBLOCK_KHO_FDT "memblock"
#define MEMBLOCK_KHO_NODE_COMPATIBLE "memblock-v1"
#define RESERVE_MEM_KHO_NODE_COMPATIBLE "reserve-mem-v1"
static int __init reserved_mem_preserve(void)
{