Re: [PATCH v5 2/3] kho: add KHOSER_COPY_PTR to allow phys copy of serialized ptr
From: tarunsahu
Date: Fri Jun 26 2026 - 14:49:48 EST
+mike
As per you suggestion:
({ \
typeof((dest).ptr) __dst; \
typeof((src).ptr) __src; \
static_assert( \
__builtin_types_compatible_p(__dst, __src)) || \
__builtin_types_compatible_p(__dst, void *) || \
__builtin_types_compatible_p(__src, void *), \
"pointer type mismatch in KHOSER_COPY_PTR" \
); \
(dest).phys = (src).phys; \
})
This is incorrect: as it looks for type instead of var and adding
typedef like below throws warning in checkpatch : no new typedefs.
({ \
typedef typeof((dest).ptr) __dst; \
typedef typeof((src).ptr) __src; \
static_assert( \
__builtin_types_compatible_p(__dst, __src)) || \
__builtin_types_compatible_p(__dst, void *) || \
__builtin_types_compatible_p(__src, void *), \
"pointer type mismatch in KHOSER_COPY_PTR" \
); \
(dest).phys = (src).phys; \
})
OR we can add __builtin_...(typeof(__dst), typeof(__src)), But this does
not solve the purpose of improving the readability.
So I am fine with the original, as it is more straight-forward to read.
Typeof(pointer of destination) (typeof(dst.ptr)) and so on.
~Tarun
Tarun Sahu <tarunsahu@xxxxxxxxxx> writes:
> Adding KHOSER_COPY_PTR to copy one serializeable pointer to
> another. It basically allows copy of phys val of the
> serializeable pointer.
>
> It ignores the typecheck if any of the argument is of void *
>
> Signed-off-by: Tarun Sahu <tarunsahu@xxxxxxxxxx>
> ---
> include/linux/kho/abi/kexec_handover.h | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/include/linux/kho/abi/kexec_handover.h b/include/linux/kho/abi/kexec_handover.h
> index 5e2eb8519bda..c1b61d875dcc 100644
> --- a/include/linux/kho/abi/kexec_handover.h
> +++ b/include/linux/kho/abi/kexec_handover.h
> @@ -139,6 +139,17 @@
> (typeof((s).ptr))((s).phys ? phys_to_virt((s).phys) : NULL); \
> })
>
> +/* Copies one serializable pointer to another. */
> +#define KHOSER_COPY_PTR(dest, src) \
> + ({ \
> + static_assert( \
> + __builtin_types_compatible_p(typeof((dest).ptr), typeof((src).ptr)) || \
> + __builtin_types_compatible_p(typeof((dest).ptr), void *) || \
> + __builtin_types_compatible_p(typeof((src).ptr), void *), \
> + "pointer type mismatch in KHOSER_COPY_PTR" \
> + ); \
> + (dest).phys = (src).phys; \
> + })
> /*
> * This header is embedded at the beginning of each `kho_vmalloc_chunk`
> * and contains a pointer to the next chunk in the linked list,
> --
> 2.55.0.rc0.786.g65d90a0328-goog