Re: [PATCH v5 02/22] liveupdate: luo_core: integrate with KHO
From: Mike Rapoport <rppt@kernel.org>
Date: 2025-11-12 13:25:28
Also in:
linux-api, linux-fsdevel, linux-mm, lkml
Hi Pasha, On Tue, Nov 11, 2025 at 03:57:39PM -0500, Pasha Tatashin wrote:
Hi Mike, Thank you for review, my comments below:quoted
quoted
This is why this call is placed first in reboot(), before any irreversible reboot notifiers or shutdown callbacks are performed. If an allocation problem occurs in KHO, the error is simply reported back to userspace, and the live update update is safely aborted.
The call to liveupdate_reboot() is just before kernel_kexec(). Why we don't move it there? And all the liveupdate_reboot() does if kho_finalize() fails it's massaging the error value before returning it to userspace. Why kernel_kexec() can't do the same?
quoted
This is fine. But what I don't like is that we can't use kho without liveupdate. We are making debugfs optional, we have a way to callYes you can: you can disable liveupdate (i.e. not supply liveupdate=1 via kernel parameter) and use KHO the old way: drive it from the userspace. However, if liveupdate is enabled, liveupdate becomes the driver of KHO as unfortunately KHO has these weird states at the moment.
The "weird state" is the point where KHO builds its FDT. Replacing the current memory tracker with one that does not require serialization won't change it. We still need a way to tell KHO that "there won't be new nodes in FDT, pack it".
quoted
kho_finalize() on the reboot path and it does not seem an issue to do it even without liveupdate. But then we force kho_finalize() into liveupdate_reboot() allowing weird configurations where kho is there but it's unusable.What do you mean KHO is there but unusable, we should not have such a state...
If you compile a kernel with KEXEC_HANDOVER=y, KEXEC_HANDOVER_DEBUGFS=n and LIVEUPDATE=n and boot with kho=1 there is nothing to trigger kho_finalize().
quoted
What I'd like to see is that we can finalize KHO on kexec reboot path even when liveupdate is not compiled and until then the patch that makes KHO debugfs optional should not go further IMO. Another thing I didn't check in this series yet is how finalization driven from debugfs interacts with liveupdate internal handling?I think what we can do is the following: - Remove "Kconfig: make debugfs optional" from this series, and instead make that change as part of stateless KHO work. - This will ensure that when liveupdate=0 always KHO finalize is fully support the old way. - When liveupdate=1 always disable KHO debugfs "finalize" API, and allow liveupdate to drive it automatically. It would add another liveupdate_enable() check to KHO, and is going to be removed as part of stateless KHO work.
KHO should not call into liveupdate. That's layering violation. And "stateless KHO" does not really make it stateless, it only removes the memory serialization from kho_finalize(), but it's still required to pack the FDT. I think we should allow kho finalization in some form from kernel_kexec(). When kho=1 and liveupdate=0, it will actually create the FDT if there was no previous trigger from debugfs or it will continue with FDT created by explicit request via debugfs. When liveupdate=1, liveupdate_reboot() may call a function that actually finalizes the state to allow safe rollback (although in the current patches it does not seem necessary). And then kho_finalize() called from kernel_kexec() will just continue with the state created by liveupdate_reboot(). If we already finalized the kho state via debugfs, liveupdate_reboot() can either error out or reset that state.
Pasha
-- Sincerely yours, Mike.