mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-29 13:23:23 +01:00
dev
7
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ec7c0b1a0d |
kho: expose kho_scratch_overlap() to kexec_handover.h
Support for discovering memory blocks with no preserved memory will be added in coming patches. These areas will also be marked as scratch to allow allocations from them. Memblock will switch to looking through the scratch array to decide the right migratetype. Expose kho_scratch_overlap() to KHO users. Since it is now used by non-debug code, move it out of kexec_handover_debug.c and into kexec_handover.c. Gate the overlap checks in kho_preserve_folio() and kho_preserve_pages() by IS_ENABLED(CONFIG_KEXEC_HANDOVER_DEBUG) instead. Since kexec_handover_debug.c is now empty, delete it. Add a stub for kho_scratch_overlap() to memblock tests to make sure it compiles. It will be used in memblock by a coming commit. No functional changes. Signed-off-by: Pratyush Yadav (Google) <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mike Rapoport (Microsoft) <[email protected]> |
||
|
|
0349ff2887 |
kho: add support for linked-block serialization
Introduce a linked-block serialization mechanism for state handover. Previously, LUO used contiguous memory blocks for serializing sessions and files, which imposed limits on the total number of items that could be preserved across a live update. This commit adds the infrastructure for a more flexible, block-based approach where serialized data is stored in a chain of linked blocks. This is a generic KHO serialization block infrastructure that can be used by multiple subsystems. Signed-off-by: Pasha Tatashin <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mike Rapoport (Microsoft) <[email protected]> |
||
|
|
cab056f2aa |
liveupdate: luo_flb: introduce File-Lifecycle-Bound global state
Introduce a mechanism for managing global kernel state whose lifecycle is tied to the preservation of one or more files. This is necessary for subsystems where multiple preserved file descriptors depend on a single, shared underlying resource. An example is HugeTLB, where multiple file descriptors such as memfd and guest_memfd may rely on the state of a single HugeTLB subsystem. Preserving this state for each individual file would be redundant and incorrect. The state should be preserved only once when the first file is preserved, and restored/finished only once the last file is handled. This patch introduces File-Lifecycle-Bound (FLB) objects to solve this problem. An FLB is a global, reference-counted object with a defined set of operations: - A file handler (struct liveupdate_file_handler) declares a dependency on one or more FLBs via a new registration function, liveupdate_register_flb(). - When the first file depending on an FLB is preserved, the FLB's .preserve() callback is invoked to save the shared global state. The reference count is then incremented for each subsequent file. - Conversely, when the last file is unpreserved (before reboot) or finished (after reboot), the FLB's .unpreserve() or .finish() callback is invoked to clean up the global resource. The implementation includes: - A new set of ABI definitions (luo_flb_ser, luo_flb_head_ser) and a corresponding FDT node (luo-flb) to serialize the state of all active FLBs and pass them via Kexec Handover. - Core logic in luo_flb.c to manage FLB registration, reference counting, and the invocation of lifecycle callbacks. - An API (liveupdate_flb_get/_incoming/_outgoing) for other kernel subsystems to safely access the live object managed by an FLB, both before and after the live update. This framework provides the necessary infrastructure for more complex subsystems like IOMMU, VFIO, and KVM to integrate with the Live Update Orchestrator. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Pasha Tatashin <[email protected]> Cc: Alexander Graf <[email protected]> Cc: David Gow <[email protected]> Cc: David Matlack <[email protected]> Cc: David Rientjes <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Kees Cook <[email protected]> Cc: Mike Rapoport <[email protected]> Cc: Petr Mladek <[email protected]> Cc: Pratyush Yadav <[email protected]> Cc: Samiullah Khawaja <[email protected]> Cc: Tamir Duberstein <[email protected]> Signed-off-by: Andrew Morton <[email protected]> |
||
|
|
7c722a7f44 |
liveupdate: luo_file: implement file systems callbacks
This patch implements the core mechanism for managing preserved files throughout the live update lifecycle. It provides the logic to invoke the file handler callbacks (preserve, unpreserve, freeze, unfreeze, retrieve, and finish) at the appropriate stages. During the reboot phase, luo_file_freeze() serializes the final metadata for each file (handler compatible string, token, and data handle) into a memory region preserved by KHO. In the new kernel, luo_file_deserialize() reconstructs the in-memory file list from this data, preparing the session for retrieval. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Pasha Tatashin <[email protected]> Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> Reviewed-by: Pratyush Yadav <[email protected]> Tested-by: David Matlack <[email protected]> Cc: Aleksander Lobakin <[email protected]> Cc: Alexander Graf <[email protected]> Cc: Alice Ryhl <[email protected]> Cc: Andriy Shevchenko <[email protected]> Cc: anish kumar <[email protected]> Cc: Anna Schumaker <[email protected]> Cc: Bartosz Golaszewski <[email protected]> Cc: Bjorn Helgaas <[email protected]> Cc: Borislav Betkov <[email protected]> Cc: Chanwoo Choi <[email protected]> Cc: Chen Ridong <[email protected]> Cc: Chris Li <[email protected]> Cc: Christian Brauner <[email protected]> Cc: Daniel Wagner <[email protected]> Cc: Danilo Krummrich <[email protected]> Cc: Dan Williams <[email protected]> Cc: David Hildenbrand <[email protected]> Cc: David Jeffery <[email protected]> Cc: David Rientjes <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Guixin Liu <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Ilpo Järvinen <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Ira Weiny <[email protected]> Cc: Jann Horn <[email protected]> Cc: Jason Gunthorpe <[email protected]> Cc: Jens Axboe <[email protected]> Cc: Joanthan Cameron <[email protected]> Cc: Joel Granados <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Lennart Poettering <[email protected]> Cc: Leon Romanovsky <[email protected]> Cc: Leon Romanovsky <[email protected]> Cc: Lukas Wunner <[email protected]> Cc: Marc Rutland <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Matthew Maurer <[email protected]> Cc: Miguel Ojeda <[email protected]> Cc: Myugnjoo Ham <[email protected]> Cc: Parav Pandit <[email protected]> Cc: Pratyush Yadav <[email protected]> Cc: Randy Dunlap <[email protected]> Cc: Roman Gushchin <[email protected]> Cc: Saeed Mahameed <[email protected]> Cc: Samiullah Khawaja <[email protected]> Cc: Song Liu <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Stuart Hayes <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Thomas Gleinxer <[email protected]> Cc: Thomas Weißschuh <[email protected]> Cc: Vincent Guittot <[email protected]> Cc: William Tu <[email protected]> Cc: Yoann Congal <[email protected]> Cc: Zhu Yanjun <[email protected]> Cc: Zijun Hu <[email protected]> Signed-off-by: Andrew Morton <[email protected]> |
||
|
|
0153094d03 |
liveupdate: luo_session: add sessions support
Introduce concept of "Live Update Sessions" within the LUO framework. LUO sessions provide a mechanism to group and manage `struct file *` instances (representing file descriptors) that need to be preserved across a kexec-based live update. Each session is identified by a unique name and acts as a container for file objects whose state is critical to a userspace workload, such as a virtual machine or a high-performance database, aiming to maintain their functionality across a kernel transition. This groundwork establishes the framework for preserving file-backed state across kernel updates, with the actual file data preservation mechanisms to be implemented in subsequent patches. [[email protected]: fix use after free in luo_session_deserialize()] Link: https://lkml.kernel.org/r/c5dd637d7eed3a3be48c5e9fedb881596a3b1f5a.1764163896.git.dan.carpenter@linaro.org Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Pasha Tatashin <[email protected]> Signed-off-by: Dan Carpenter <[email protected]> Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> Reviewed-by: Pratyush Yadav <[email protected]> Tested-by: David Matlack <[email protected]> Cc: Aleksander Lobakin <[email protected]> Cc: Alexander Graf <[email protected]> Cc: Alice Ryhl <[email protected]> Cc: Andriy Shevchenko <[email protected]> Cc: anish kumar <[email protected]> Cc: Anna Schumaker <[email protected]> Cc: Bartosz Golaszewski <[email protected]> Cc: Bjorn Helgaas <[email protected]> Cc: Borislav Betkov <[email protected]> Cc: Chanwoo Choi <[email protected]> Cc: Chen Ridong <[email protected]> Cc: Chris Li <[email protected]> Cc: Christian Brauner <[email protected]> Cc: Daniel Wagner <[email protected]> Cc: Danilo Krummrich <[email protected]> Cc: Dan Williams <[email protected]> Cc: David Hildenbrand <[email protected]> Cc: David Jeffery <[email protected]> Cc: David Rientjes <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Guixin Liu <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Ilpo Järvinen <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Ira Weiny <[email protected]> Cc: Jann Horn <[email protected]> Cc: Jason Gunthorpe <[email protected]> Cc: Jens Axboe <[email protected]> Cc: Joanthan Cameron <[email protected]> Cc: Joel Granados <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Lennart Poettering <[email protected]> Cc: Leon Romanovsky <[email protected]> Cc: Leon Romanovsky <[email protected]> Cc: Lukas Wunner <[email protected]> Cc: Marc Rutland <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Matthew Maurer <[email protected]> Cc: Miguel Ojeda <[email protected]> Cc: Myugnjoo Ham <[email protected]> Cc: Parav Pandit <[email protected]> Cc: Pratyush Yadav <[email protected]> Cc: Randy Dunlap <[email protected]> Cc: Roman Gushchin <[email protected]> Cc: Saeed Mahameed <[email protected]> Cc: Samiullah Khawaja <[email protected]> Cc: Song Liu <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Stuart Hayes <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Thomas Gleinxer <[email protected]> Cc: Thomas Weißschuh <[email protected]> Cc: Vincent Guittot <[email protected]> Cc: William Tu <[email protected]> Cc: Yoann Congal <[email protected]> Cc: Zhu Yanjun <[email protected]> Cc: Zijun Hu <[email protected]> Signed-off-by: Andrew Morton <[email protected]> |
||
|
|
9e2fd062fa |
liveupdate: luo_core: Live Update Orchestrator
Patch series "Live Update Orchestrator", v8. This series introduces the Live Update Orchestrator, a kernel subsystem designed to facilitate live kernel updates using a kexec-based reboot. This capability is critical for cloud environments, allowing hypervisors to be updated with minimal downtime for running virtual machines. LUO achieves this by preserving the state of selected resources, such as memory, devices and their dependencies, across the kernel transition. As a key feature, this series includes support for preserving memfd file descriptors, which allows critical in-memory data, such as guest RAM or any other large memory region, to be maintained in RAM across the kexec reboot. The other series that use LUO, are VFIO [1], IOMMU [2], and PCI [3] preservations. Github repo of this series [4]. The core of LUO is a framework for managing the lifecycle of preserved resources through a userspace-driven interface. Key features include: - Session Management Userspace agent (i.e. luod [5]) creates named sessions, each represented by a file descriptor (via centralized agent that controls /dev/liveupdate). The lifecycle of all preserved resources within a session is tied to this FD, ensuring automatic kernel cleanup if the controlling userspace agent crashes or exits unexpectedly. - File Preservation A handler-based framework allows specific file types (demonstrated here with memfd) to be preserved. Handlers manage the serialization, restoration, and lifecycle of their specific file types. - File-Lifecycle-Bound State A new mechanism for managing shared global state whose lifecycle is tied to the preservation of one or more files. This is crucial for subsystems like IOMMU or HugeTLB, where multiple file descriptors may depend on a single, shared underlying resource that must be preserved only once. - KHO Integration LUO drives the Kexec Handover framework programmatically to pass its serialized metadata to the next kernel. The LUO state is finalized and added to the kexec image just before the reboot is triggered. In the future this step will also be removed once stateless KHO is merged [6]. - Userspace Interface Control is provided via ioctl commands on /dev/liveupdate for creating and retrieving sessions, as well as on session file descriptors for managing individual files. - Testing The series includes a set of selftests, including userspace API validation, kexec-based lifecycle tests for various session and file scenarios, and a new in-kernel test module to validate the FLB logic. Introduce LUO, a mechanism intended to facilitate kernel updates while keeping designated devices operational across the transition (e.g., via kexec). The primary use case is updating hypervisors with minimal disruption to running virtual machines. For userspace side of hypervisor update we have copyless migration. LUO is for updating the kernel. This initial patch lays the groundwork for the LUO subsystem. Further functionality, including the implementation of state transition logic, integration with KHO, and hooks for subsystems and file descriptors, will be added in subsequent patches. Create a character device at /dev/liveupdate. A new uAPI header, <uapi/linux/liveupdate.h>, will define the necessary structures. The magic number for IOCTL is registered in Documentation/userspace-api/ioctl/ioctl-number.rst. Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Link: https://lore.kernel.org/all/[email protected]/ [1] Link: https://lore.kernel.org/linux-iommu/[email protected] [2] Link: https://lore.kernel.org/linux-pci/[email protected] [3] Link: https://github.com/googleprodkernel/linux-liveupdate/tree/luo/v8 [4] Link: https://tinyurl.com/luoddesign [5] Link: https://lore.kernel.org/all/[email protected] [6] Link: https://lore.kernel.org/all/[email protected] [7] Link: https://github.com/soleen/linux/blob/luo/v8b03/diff.v7.v8 [8] Signed-off-by: Pasha Tatashin <[email protected]> Reviewed-by: Pratyush Yadav <[email protected]> Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> Tested-by: David Matlack <[email protected]> Cc: Aleksander Lobakin <[email protected]> Cc: Alexander Graf <[email protected]> Cc: Alice Ryhl <[email protected]> Cc: Andriy Shevchenko <[email protected]> Cc: anish kumar <[email protected]> Cc: Anna Schumaker <[email protected]> Cc: Bartosz Golaszewski <[email protected]> Cc: Bjorn Helgaas <[email protected]> Cc: Borislav Betkov <[email protected]> Cc: Chanwoo Choi <[email protected]> Cc: Chen Ridong <[email protected]> Cc: Chris Li <[email protected]> Cc: Christian Brauner <[email protected]> Cc: Daniel Wagner <[email protected]> Cc: Danilo Krummrich <[email protected]> Cc: Dan Williams <[email protected]> Cc: David Hildenbrand <[email protected]> Cc: David Jeffery <[email protected]> Cc: David Rientjes <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Guixin Liu <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Ilpo Järvinen <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Ira Weiny <[email protected]> Cc: Jann Horn <[email protected]> Cc: Jason Gunthorpe <[email protected]> Cc: Jens Axboe <[email protected]> Cc: Joanthan Cameron <[email protected]> Cc: Joel Granados <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Lennart Poettering <[email protected]> Cc: Leon Romanovsky <[email protected]> Cc: Leon Romanovsky <[email protected]> Cc: Lukas Wunner <[email protected]> Cc: Marc Rutland <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Matthew Maurer <[email protected]> Cc: Miguel Ojeda <[email protected]> Cc: Myugnjoo Ham <[email protected]> Cc: Parav Pandit <[email protected]> Cc: Randy Dunlap <[email protected]> Cc: Roman Gushchin <[email protected]> Cc: Saeed Mahameed <[email protected]> Cc: Samiullah Khawaja <[email protected]> Cc: Song Liu <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Stuart Hayes <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Thomas Gleinxer <[email protected]> Cc: Thomas Weißschuh <[email protected]> Cc: Vincent Guittot <[email protected]> Cc: William Tu <[email protected]> Cc: Yoann Congal <[email protected]> Cc: Zijun Hu <[email protected]> Cc: Pratyush Yadav <[email protected]> Cc: Zhu Yanjun <[email protected]> Signed-off-by: Andrew Morton <[email protected]> |
||
|
|
48a1b2321d |
liveupdate: kho: move to kernel/liveupdate
Move KHO to kernel/liveupdate/ in preparation of placing all Live Update core kernel related files to the same place. [[email protected]: disable the menu when DEFERRED_STRUCT_PAGE_INIT] Link: https://lkml.kernel.org/r/CA+CK2bAvh9Oa2SLfsbJ8zztpEjrgr_hr-uGgF1coy8yoibT39A@mail.gmail.com Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Pasha Tatashin <[email protected]> Reviewed-by: Jason Gunthorpe <[email protected]> Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> Cc: Alexander Graf <[email protected]> Cc: Changyuan Lyu <[email protected]> Cc: Christian Brauner <[email protected]> Cc: Jason Gunthorpe <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Miguel Ojeda <[email protected]> Cc: Pratyush Yadav <[email protected]> Cc: Randy Dunlap <[email protected]> Cc: Simon Horman <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Zhu Yanjun <[email protected]> Signed-off-by: Andrew Morton <[email protected]> |