[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2vxzy0lscks4.fsf@kernel.org>
Date: Tue, 20 Jan 2026 16:26:51 +0000
From: Pratyush Yadav <pratyush@...nel.org>
To: Mike Rapoport <rppt@...nel.org>
Cc: Andrew Morton <akpm@...ux-foundation.org>, Alexander Graf
<graf@...zon.com>, Jason Miu <jasonmiu@...gle.com>, Jonathan Corbet
<corbet@....net>, Pasha Tatashin <pasha.tatashin@...een.com>, Pratyush
Yadav <pratyush@...nel.org>, kexec@...ts.infradead.org,
linux-doc@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-mm@...ck.org
Subject: Re: [PATCH 5/6] kho: Relocate vmalloc preservation structure to KHO
ABI header
On Mon, Jan 05 2026, Mike Rapoport wrote:
> From: Jason Miu <jasonmiu@...gle.com>
>
> The `struct kho_vmalloc` defines the in-memory layout for preserving
> vmalloc regions across kexec. This layout is a contract between kernels
> and part of the KHO ABI.
>
> To reflect this relationship, the related structs and helper macros are
> relocated to the ABI header, `include/linux/kho/abi/kexec_handover.h`.
> This move places the structure's definition under the protection of the
> KHO_FDT_COMPATIBLE version string.
>
> The structure and its components are now also documented within the
> ABI header to describe the contract and prevent ABI breaks.
>
> Signed-off-by: Jason Miu <jasonmiu@...gle.com>
> Co-developed-by: Mike Rapoport (Microsoft) <rppt@...nel.org>
> Signed-off-by: Mike Rapoport (Microsoft) <rppt@...nel.org>
[...]
> +/* Helper macro to define a union for a serializable pointer. */
> +#define DECLARE_KHOSER_PTR(name, type) \
> + union { \
> + u64 phys; \
> + type ptr; \
> + } name
> +
> +/* Stores the physical address of a serializable pointer. */
> +#define KHOSER_STORE_PTR(dest, val) \
> + ({ \
> + typeof(val) v = val; \
> + typecheck(typeof((dest).ptr), v); \
> + (dest).phys = virt_to_phys(v); \
> + })
> +
> +/* Loads the stored physical address back to a pointer. */
> +#define KHOSER_LOAD_PTR(src) \
> + ({ \
> + typeof(src) s = src; \
> + (typeof((s).ptr))((s).phys ? phys_to_virt((s).phys) : NULL); \
> + })
Nit: not a fan of exposing code internals to the ABI header. But without
this the definition of kho_vmalloc_hdr won't make any sense to someone
reading the doc without looking at the code. Dunno if we can do anything
better though...
> +
> +/*
> + * This header is embedded at the beginning of each `kho_vmalloc_chunk`
> + * and contains a pointer to the next chunk in the linked list,
> + * stored as a physical address for handover.
> + */
> +struct kho_vmalloc_hdr {
> + DECLARE_KHOSER_PTR(next, struct kho_vmalloc_chunk *);
> +};
> +
> +#define KHO_VMALLOC_SIZE \
> + ((PAGE_SIZE - sizeof(struct kho_vmalloc_hdr)) / \
> + sizeof(u64))
> +
> +/*
> + * Each chunk is a single page and is part of a linked list that describes
> + * a preserved vmalloc area. It contains the header with the link to the next
> + * chunk and an array of physical addresses of the pages that make up the
> + * preserved vmalloc area.
Perhaps also mention that the array is 0-terminated?
Looks good otherwise.
[...]
--
Regards,
Pratyush Yadav
Powered by blists - more mailing lists