linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Pasha Tatashin <pasha.tatashin@soleen.com>
To: Mike Rapoport <rppt@kernel.org>
Cc: akpm@linux-foundation.org, bhe@redhat.com, jasonmiu@google.com,
	 arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca,
	ebiggers@google.com,  graf@amazon.com, kees@kernel.org,
	linux-kernel@vger.kernel.org,  kexec@lists.infradead.org,
	linux-mm@kvack.org
Subject: Re: [PATCH v1 09/13] kho: Update FDT dynamically for subtree addition/removal
Date: Fri, 14 Nov 2025 11:42:07 -0500	[thread overview]
Message-ID: <CA+CK2bCHoHRX9wM+hF-G5G2prVYdDSWzLETPmVXooKsXda5xbw@mail.gmail.com> (raw)
In-Reply-To: <aRdVn-e3Wu_pFdmZ@kernel.org>

On Fri, Nov 14, 2025 at 11:15 AM Mike Rapoport <rppt@kernel.org> wrote:
>
> On Fri, Nov 14, 2025 at 10:53:54AM -0500, Pasha Tatashin wrote:
> > Currently, sub-FDTs were tracked in a list (kho_out.sub_fdts) and the
> > final FDT is constructed entirely from scratch during kho_finalize().
> >
> > We can maintain the FDT dynamically:
> > 1. Initialize a valid, empty FDT in kho_init().
> > 2. Use fdt_add_subnode and fdt_setprop in kho_add_subtree to
> >    update the FDT immediately when a subsystem registers.
> > 3. Use fdt_del_node in kho_remove_subtree to remove entries.
> >
> > This removes the need for the intermediate sub_fdts list and the
> > reconstruction logic in kho_finalize(). kho_finalize() now
> > only needs to trigger memory map serialization.
> >
> > Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
> > ---
> >  kernel/liveupdate/kexec_handover.c | 144 ++++++++++++++---------------
> >  1 file changed, 68 insertions(+), 76 deletions(-)
> >
> > diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c
> > index 8ab77cb85ca9..822da961d4c9 100644
> > --- a/kernel/liveupdate/kexec_handover.c
> > +++ b/kernel/liveupdate/kexec_handover.c
> > @@ -724,37 +713,67 @@ static void __init kho_reserve_scratch(void)
> >   */
> >  int kho_add_subtree(const char *name, void *fdt)
> >  {
> > -     struct kho_sub_fdt *sub_fdt;
> > +     phys_addr_t phys = virt_to_phys(fdt);
> > +     void *root_fdt = kho_out.fdt;
> > +     int err = -ENOMEM;
> > +     int off, fdt_err;
> >
> > -     sub_fdt = kmalloc(sizeof(*sub_fdt), GFP_KERNEL);
> > -     if (!sub_fdt)
> > -             return -ENOMEM;
> > +     guard(mutex)(&kho_out.lock);
> > +
> > +     fdt_err = fdt_open_into(root_fdt, root_fdt, PAGE_SIZE);
> > +     if (fdt_err < 0)
> > +             return err;
> > -     INIT_LIST_HEAD(&sub_fdt->l);
> > -     sub_fdt->name = name;
> > -     sub_fdt->fdt = fdt;
> > +     off = fdt_add_subnode(root_fdt, 0, name);
>
>         fdt_err = fdt_add_subnode();
>
> and then we don't need off
>
> > +     if (off < 0) {
> > +             if (off == -FDT_ERR_EXISTS)
> > +                     err = -EEXIST;
>
> Is it really -ENOMEM for other FDT_ERR values?

In practice, yes. There are some other errors like format mismatch,
magic values etc, but all of them are internal FDT problems. The only
error that really matters to users is the -ENOMEM one.

Pasha

>
> > +             goto out_pack;
> > +     }
> > +
> > +     err = fdt_setprop(root_fdt, off, PROP_SUB_FDT, &phys, sizeof(phys));
> > +     if (err < 0)
> > +             goto out_pack;
> >
> > -     guard(mutex)(&kho_out.fdts_lock);
> > -     list_add_tail(&sub_fdt->l, &kho_out.sub_fdts);
> >       WARN_ON_ONCE(kho_debugfs_fdt_add(&kho_out.dbg, name, fdt, false));
> >
> > -     return 0;
> > +out_pack:
> > +     fdt_pack(root_fdt);
> > +
> > +     return err;
> >  }
> >  EXPORT_SYMBOL_GPL(kho_add_subtree);
>
> --
> Sincerely yours,
> Mike.


  reply	other threads:[~2025-11-14 16:42 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-14 15:53 [PATCH v1 00/13] kho: simplify state machine and enable dynamic updates Pasha Tatashin
2025-11-14 15:53 ` [PATCH v1 01/13] kho: Fix misleading log message in kho_populate() Pasha Tatashin
2025-11-14 16:32   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 02/13] kho: Convert __kho_abort() to return void Pasha Tatashin
2025-11-14 16:32   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 03/13] kho: Preserve FDT folio only once during initialization Pasha Tatashin
2025-11-14 16:32   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 04/13] kho: Verify deserialization status and fix FDT alignment access Pasha Tatashin
2025-11-14 16:52   ` Pratyush Yadav
2025-11-14 17:21     ` Pasha Tatashin
2025-11-15  9:36     ` Mike Rapoport
2025-11-18 13:19       ` Pratyush Yadav
2025-11-18 15:25         ` Pasha Tatashin
2025-11-18 17:11           ` Pratyush Yadav
2025-11-20 10:39             ` Mike Rapoport
2025-11-14 15:53 ` [PATCH v1 05/13] kho: Always expose output FDT in debugfs Pasha Tatashin
2025-11-14 16:59   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 06/13] kho: Simplify serialization and remove __kho_abort Pasha Tatashin
2025-11-14 17:04   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 07/13] kho: Remove global preserved_mem_map and store state in FDT Pasha Tatashin
2025-11-14 17:11   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 08/13] kho: Remove abort functionality and support state refresh Pasha Tatashin
2025-11-14 17:18   ` Pratyush Yadav
2025-11-14 17:23     ` Pasha Tatashin
2025-11-14 17:47       ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 09/13] kho: Update FDT dynamically for subtree addition/removal Pasha Tatashin
2025-11-14 16:15   ` Mike Rapoport
2025-11-14 16:42     ` Pasha Tatashin [this message]
2025-11-14 17:27   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 10/13] kho: Allow kexec load before KHO finalization Pasha Tatashin
2025-11-14 17:30   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 11/13] kho: Allow memory preservation state updates after finalization Pasha Tatashin
2025-11-14 17:33   ` Pratyush Yadav
2025-11-14 17:47     ` Pasha Tatashin
2025-11-14 15:53 ` [PATCH v1 12/13] kho: Add Kconfig option to enable KHO by default Pasha Tatashin
2025-11-14 17:34   ` Pratyush Yadav
2025-11-14 15:53 ` [PATCH v1 13/13] kho: Introduce high-level memory allocation API Pasha Tatashin
2025-11-14 16:15   ` Mike Rapoport
2025-11-14 16:40     ` Pasha Tatashin
2025-11-14 17:45   ` Pratyush Yadav
2025-11-14 17:54     ` Pasha Tatashin
2025-11-14 16:17 ` [PATCH v1 00/13] kho: simplify state machine and enable dynamic updates Mike Rapoport
2025-11-14 16:46   ` Pasha Tatashin

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=CA+CK2bCHoHRX9wM+hF-G5G2prVYdDSWzLETPmVXooKsXda5xbw@mail.gmail.com \
    --to=pasha.tatashin@soleen.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=bhe@redhat.com \
    --cc=coxu@redhat.com \
    --cc=dave@vasilevsky.ca \
    --cc=ebiggers@google.com \
    --cc=graf@amazon.com \
    --cc=jasonmiu@google.com \
    --cc=kees@kernel.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rppt@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