From: David Matlack <dmatlack@google.com>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: tarunsahu@google.com, Andrew Morton <akpm@linux-foundation.org>,
joro@8bytes.org, Mike Rapoport <rppt@kernel.org>,
Pratyush Yadav <pratyush@kernel.org>,
maz@kernel.org, arnd@arndb.de, jgg@nvidia.com,
robin.murphy@arm.com, loganodell@google.com, oupton@kernel.org,
kevin.tian@intel.com, alex@shazbot.org, dwmw2@infradead.org,
pbonzini@redhat.com, seanjc@google.com, will@kernel.org,
Alexander Graf <graf@amazon.com>,
Bjorn Helgaas <bhelgaas@google.com>,
baolu.lu@linux.intel.com, linux-arm-kernel@lists.infradead.org,
linux-arch@vger.kernel.org, sagis@google.com, linux-mm@kvack.org,
kvmarm@lists.linux.dev, iommu@lists.linux.dev,
linux-pci@vger.kernel.org, kexec@lists.infradead.org,
skhawaja@google.com, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH v2 3/4] liveupdate: Replace compatibility string with a 2-bit pair feature header
Date: Tue, 27 Oct 2026 17:33:41 +0000 [thread overview]
Message-ID: <auDgdUb3y_ricEq9@google.com> (raw)
In-Reply-To: <auDPd6tjzACQVszf@google.com>
On 2026-10-27 12:21 PM, Pasha Tatashin wrote:
> My main requirement is that DECLARE_KHO_SER() in include/linux/kho/abi/
> must be enforced by the compiler rather than being just a bare
> static_assert() that someone could forget to add. Since kho/abi/ headers
> contain both versioned structs and unversioned sub-structs, it must be
> mandatory to declare versioned structs in kho/abi/ with their
> static_assert size check before the kho_ser_*() helpers can be used on
> them.
>
> So, how about adding enum names like this, that are going to be required
> in accessor functions later:
>
> #define DECLARE_KHO_SER(name, payload_size, nr_feats) \
> static_assert(sizeof(struct name) == (payload_size), \
> "struct " #name " size mismatch"); \
> enum { \
> __KHO_SER_SIZE_##name = (payload_size), \
> __KHO_SER_NR_FEATS_##name = (nr_feats), \
> }
Sounds good. Since you're also on board with splitting required
and optional features [1], this would take both counts:
#define DECLARE_KHO_SER(name, payload_size, nr_required, nr_optional) \
static_assert(sizeof(struct name) == (payload_size), \
"struct " #name " size mismatch"); \
enum { \
__KHO_SER_SIZE_##name = (payload_size), \
__KHO_SER_NR_REQUIRED_##name = (nr_required), \
__KHO_SER_NR_OPTIONAL_##name = (nr_optional), \
}
DECLARE_KHO_SER(memfd_luo_ser, 16, MEMFD_LUO_NR_REQUIRED, MEMFD_LUO_NR_OPTIONAL);
The incoming path can also use __KHO_SER_NR_OPTIONAL_##name to validate
the incoming header only contains required features that it knows how to
handle:
#define kho_ser_validate(hdr, name) \
__kho_ser_validate(hdr, __KHO_SER_NR_REQUIRED_##name)
> > Plus helpers that allocate and initialize the header and return the
> > payload as a typed pointer. Both the outgoing and incoming paths find
> > the payload the same way, by computing its offset from the header,
> > rather than through a struct with a fixed payload offset:
> >
> > /* outgoing */
> > hdr = kho_ser_alloc(luo_memfd_ser, LUO_MEMFD_NR_FEATS);
> > ser = kho_ser_payload(hdr, luo_memfd_ser);
> >
> > /* incoming */
> > hdr = phys_to_virt(args->serialized_data);
> > ser = kho_ser_payload(hdr, luo_memfd_ser);
>
> These would become, where without enum, the init would fail:
>
> #define kho_ser_init(buf, name) \
> __kho_ser_init(buf, __KHO_SER_SIZE_##name, \
> __KHO_SER_NR_FEATS_##name)
>
> And payload can also check the existance of DECLARE_KHO_SER, using
> (expr1, expr2):
>
> #define kho_ser_payload(hdr, name) \
> ((void)__KHO_SER_SIZE_##name, \
> (struct name *)__kho_ser_payload(hdr))
>
> We can also add an optional kho_ser_alloc(name) to allocate, init, and
> preserve.
+1
next prev parent reply other threads:[~2026-10-27 17:33 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-21 15:25 [RFC PATCH v2 0/4] liveupdate: Feature header ABI and named handler Tarun Sahu
2026-10-21 15:25 ` [RFC PATCH v2 1/4] liveupdate: Rename handler compatible to name Tarun Sahu
2026-10-21 17:11 ` Pasha Tatashin
2026-10-21 18:16 ` tarunsahu
2026-10-21 19:11 ` Pasha Tatashin
2026-10-21 19:35 ` tarunsahu
2026-10-23 7:44 ` Mike Rapoport
2026-10-23 21:51 ` tarunsahu
2026-10-22 15:26 ` sashiko-bot
2026-10-21 15:25 ` [RFC PATCH v2 2/4] liveupdate: Select file handler by name in the preserve ioctl Tarun Sahu
2026-10-21 17:17 ` Pasha Tatashin
2026-10-21 23:02 ` David Matlack
2026-10-22 1:14 ` Pasha Tatashin
2026-10-22 17:57 ` David Matlack
2026-10-22 12:50 ` tarunsahu
2026-10-22 13:42 ` Pasha Tatashin
2026-10-22 15:26 ` sashiko-bot
2026-10-21 15:25 ` [RFC PATCH v2 3/4] liveupdate: Replace compatibility string with a 2-bit pair feature header Tarun Sahu
2026-10-21 17:27 ` Pasha Tatashin
2026-10-21 17:40 ` Jason Gunthorpe
2026-10-21 17:55 ` Pasha Tatashin
2026-10-21 18:40 ` tarunsahu
2026-10-21 18:46 ` David Matlack
2026-10-21 18:50 ` Pasha Tatashin
2026-10-21 23:28 ` David Matlack
2026-10-22 1:26 ` Pasha Tatashin
2026-10-22 2:57 ` David Matlack
2026-10-22 3:32 ` Pasha Tatashin
2026-10-22 3:52 ` David Matlack
2026-10-22 4:11 ` Pasha Tatashin
2026-10-22 17:51 ` David Matlack
2026-10-22 20:53 ` Pasha Tatashin
2026-10-23 13:50 ` David Matlack
2026-10-25 20:38 ` Pasha Tatashin
2026-10-26 20:49 ` David Matlack
2026-10-27 16:21 ` Pasha Tatashin
2026-10-27 17:33 ` David Matlack [this message]
2026-10-28 17:17 ` Pratyush Yadav
2026-10-28 17:24 ` David Matlack
2026-10-28 17:47 ` Pasha Tatashin
2026-10-28 17:44 ` Pasha Tatashin
2026-10-21 23:55 ` David Matlack
2026-10-22 0:04 ` David Matlack
2026-10-26 11:50 ` tarunsahu
2026-10-26 21:14 ` David Matlack
2026-10-26 23:28 ` tarunsahu
2026-10-27 0:01 ` David Matlack
2026-10-27 0:55 ` Tarun Sahu
2026-10-27 3:26 ` David Matlack
2026-10-27 16:40 ` Pasha Tatashin
2026-10-27 17:37 ` David Matlack
2026-10-27 21:57 ` tarunsahu
2026-10-22 15:26 ` sashiko-bot
2026-10-21 15:25 ` [RFC PATCH v2 4/4] mm: memfd_luo: Add the " Tarun Sahu
2026-10-21 17:38 ` Pasha Tatashin
2026-10-21 23:18 ` David Matlack
2026-10-22 0:41 ` Pasha Tatashin
2026-10-22 2:51 ` David Matlack
2026-10-22 3:50 ` Pasha Tatashin
2026-10-22 15:26 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=auDgdUb3y_ricEq9@google.com \
--to=dmatlack@google.com \
--cc=akpm@linux-foundation.org \
--cc=alex@shazbot.org \
--cc=arnd@arndb.de \
--cc=baolu.lu@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=dwmw2@infradead.org \
--cc=graf@amazon.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kexec@lists.infradead.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-pci@vger.kernel.org \
--cc=loganodell@google.com \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=pasha.tatashin@soleen.com \
--cc=pbonzini@redhat.com \
--cc=pratyush@kernel.org \
--cc=robin.murphy@arm.com \
--cc=rppt@kernel.org \
--cc=sagis@google.com \
--cc=seanjc@google.com \
--cc=skhawaja@google.com \
--cc=tarunsahu@google.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.