From: Pasha Tatashin <pasha.tatashin@soleen.com>
To: David Matlack <dmatlack@google.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,
Pasha Tatashin <pasha.tatashin@soleen.com>,
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 12:40:04 -0400 [thread overview]
Message-ID: <auDT5MjXYq3lcQjE@google.com> (raw)
In-Reply-To: <at_CncIPYCxOVkLo@google.com>
On 10-26 21:14, David Matlack wrote:
> On 2026-10-26 11:50 AM, tarunsahu@google.com wrote:
> > Right, Required bit should be source kernel payload property to tell
> > target kernel that the payload must be handled to correctly deserialize
> > the data. It should be source kernel (userspace) responsiblity to make
> > sure it understand the target kernel before doing liveupdate.
> >
> > Saying this, During deserialization, target kernel's required bit is not
> > necessary. So I propose the following truth table.
> >
> > Source hdr Target supported[i] Action
> > ---------- ------------------- ----------------------------------
> > 00 0 or 1 Accept: feature absent in payload
> > 01 0 Accept: ignore the feature data
> > 01 1 Accept: use the feature data
> > 11 0 Reject: -EOPNOTSUPP
> > 11 1 Accept: use the feature data
> > 10 0 or 1 Reject: -EINVAL (invalid encoding)
>
> Yes, this matches what I had in mind for the semantics.
>
> To be explicit: the source kernel should set the bits for each Live
> Update based on what is actually preserved, rather than generating the
> header from a static per-kernel array. E.g. memfd would only mark a
> feature present for memfds that actually use it. That's what allows
> rollback to an older kernel as long as nothing being preserved depends
> on the new feature.
>
> But looking at this again, I think the required bit is redundant. Whether
> a feature can be safely ignored is a property of the feature itself, not
> of any particular file. Every file that has a feature present will have
> the same required bit for it. The only thing that actually varies per
> file is whether the feature is present.
>
> The required bit still has to be conveyed to the target somehow, since
> the kernel that needs it is the one that doesn't know about the feature.
> But it can be conveyed by the feature's number rather than an extra bit:
> split the flag space into required features and optional features, and
> assign each feature to one of them when it is defined. This is similar
> to the required_flags and optional_flags approach in struct pci_ser [1].
>
> Keeping the same header shape as discussed with Pasha:
>
> struct kho_ser_hdr {
> __u32 size; /* Size of header + payload in bytes */
> __u16 nr_required; /* Number of required feature bits */
> __u16 nr_optional; /* Number of optional feature bits */
> __u64 flags[]; /* Required bits, followed by optional bits */
> };
>
> Required feature N is bit N of flags[], and optional feature N is bit
> nr_required + N (using nr_required from the incoming header). The length
> of flags[] is DIV_ROUND_UP(nr_required + nr_optional, 64). Both spaces
> are numbered contiguously, so there are no gaps, and up to 64 features
> still fit in a 16-byte header.
>
> Each bit just means the feature is present, so the truth table becomes:
>
> Source bit Target supports Action
> --------------- --------------- ------------------------------
> Not set - Accept: feature absent
> Optional set No Accept: ignore the feature data
> Optional set Yes Accept: use the feature data
> Required set No Reject: -EOPNOTSUPP
> Required set Yes Accept: use the feature data
>
I like this proposal. I bet most features are going to be either
optional or required, and even if we ever have a magical
sometimes-optional feature, it can have its own required flag. So, no
need to pay double the cost on every flag.
Just need to make sure that optional features always start from 0, in
their own enum, so the offset can be computed correctly in the incoming
kernel.
Pasha
next prev parent reply other threads:[~2026-10-27 16:40 UTC|newest]
Thread overview: 53+ 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-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-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
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 [this message]
2026-10-27 17:37 ` David Matlack
2026-10-27 21:57 ` tarunsahu
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=auDT5MjXYq3lcQjE@google.com \
--to=pasha.tatashin@soleen.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=dmatlack@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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox