The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH v7 00/12] PCI: liveupdate: PCI core support for Live Update
@ 2026-07-10 21:26 David Matlack
  2026-07-10 21:26 ` [PATCH v7 01/12] PCI: liveupdate: Set up FLB handler for the PCI core David Matlack
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: David Matlack @ 2026-07-10 21:26 UTC (permalink / raw)
  To: kexec, linux-doc, linux-kernel, linux-mm, linux-pci
  Cc: Adithya Jayachandran, Alexander Graf, Alex Williamson,
	Bjorn Helgaas, Chris Li, David Matlack, David Rientjes, Jacob Pan,
	Jason Gunthorpe, Jonathan Corbet, Josh Hilke, Leon Romanovsky,
	Lukas Wunner, Mike Rapoport, Parav Pandit, Pasha Tatashin,
	Pranjal Shrivastava, Pratyush Yadav, Saeed Mahameed,
	Samiullah Khawaja, Shuah Khan, Vipin Sharma, William Tu, Yi Liu

This series can be found on GitHub:

  https://github.com/dmatlack/linux/tree/liveupdate/pci/base/v7

This series introduces initial support in the PCI core for Live Update,
enabling drivers to preserve PCI devices across a kexec-based kernel
update without interrupting the device. This functionality is critical
for minimizing downtime in environments where PCI devices (e.g., those
assigned to VMs via VFIO) must continue operating or maintain state
across a host kernel upgrade.

Specifically, this series allows preserved PCI devices to perform
uninterrupted memory transactions (DMA) to/from system memory across a
Live Update. These devices can be behind a bridge but must not be VFs.
Support for P2P and VF preservation will be addressed in future series.

Series Overview
---------------

This series implements the following to support PCI device preservation
across Live Update:

  1. Set up a File-Lifecycle-Bound (FLB) handler to track and preserve
     PCI-specific state (struct pci_ser) across Live Update using Kexec
     Handover (KHO).

  2. Add APIs for drivers to register devices for preservation
     (outgoing) and for the PCI core to identify preserved devices
     during enumeration (incoming)

  3. Automatically preserve all upstream bridges for any preserved
     endpoint. Use reference counting to ensure bridges remain preserved
     as long as any downstream device is preserved.

  4. Guarantee that preserved devices retain the same RequesterID (bus,
     device, function) for the duration of their preservation by
     inheriting secondary bus numbers, subordinate bus numbers, and ARI
     Forwarding Enable on preserved bridges.

  5. Guarantee that memory transactions to/from preserved devices are
     routed consistently by inheriting Access Control Services (ACS)
     flags across a Live Update, from the endpoint up to the root port.

  6. Modify the PCI shutdown path to avoid disabling bus mastering on
     preserved devices, thereby allowing preserved devices to perform
     uninterrupted during kexec for Live Update.

  7. Provide comprehensive documentation for the FLB API, device
     tracking mechanisms, and the division of responsibilities between
     the PCI core, drivers, and userspace.

Dependencies
------------

This series is built on top of the next branch of the liveupdate.git
tree:

  https://git.kernel.org/pub/scm/linux/kernel/git/liveupdate/linux.git/log/?h=next

Testing
-------

This series was tested in conjunction with v4 of the VFIO PCI driver
series:

  https://lore.kernel.org/kvm/20260511234802.2280368-1-vipinsh@google.com/

The full set of patches used for testing can be found on GitHub. Some
conflict resolution was required to rebase VFIO v4 patchs on top of the
7.2-rc1 base.

  https://github.com/dmatlack/linux/tree/liveupdate/pci/base/v7-with-vfio

Testing was performed using the new VFIO selftests:

  - vfio_pci_liveupdate_uapi_test
  - vfio_pci_liveupdate_kexec_test

Both tests were run in a QEMU-based VM environment (using a single
virtio-net PCIe device connected to a root port to exercise bridge
support) and on bare metal using an Intel EMR server with 8x Intel DSA
PCIe devices and 1x NVMe device.

Future Work
-----------

Following this series, we expect to make further improvements to the PCI
core support for Live Update:

  - Allow P2P across Live Update by avoiding resizing or moving
    preserved device BARs and preserving all upstream bridge windows.

  - Support preserving Virtual Functions by preserving SR-IOV
    configuration on PFs and enumerating VFs after Live Update.

Changelog
---------

v7:
 - Use kho_block_set for dynamic device preservation, redefining ABI struct
   pci_ser to use a physical address instead of a fixed-size flexible array
   (Pasha Tatashin)
 - Add kernel-doc comments for pci_liveupdate_scan_bridge_begin() and
   pci_liveupdate_scan_bridge_end() (Pasha Tatashin)
 - Move refcount to patch 1 and adjust KHO ABI versioning progression
   accordingly (Pasha Tatashin)
 - Sphinx documentation improvements: add _luo and _flb labels and use
   acronyms with :ref: links (Pasha Tatashin)
 - Panic on failure to retrieve incoming PCI FLB data to avoid ongoing
   DMA from preserved devices causing memory corruption (Sashiko,
   Samiullah Khawaja)
 - Clarify comment about device-specific ACS quirks in incoming kernel
   (Pranjal Shrivastava)
 - Sort includes alphabetically in liveupdate.c (Pasha Tatashin)

v6: https://lore.kernel.org/linux-pci/20260522202410.3104264-1-dmatlack@google.com/
v5: https://lore.kernel.org/linux-pci/20260512184846.119396-1-dmatlack@google.com/
v4: https://lore.kernel.org/linux-pci/20260423212316.3431746-1-dmatlack@google.com/
v3: https://lore.kernel.org/kvm/20260323235817.1960573-1-dmatlack@google.com/
v2: https://lore.kernel.org/kvm/20260129212510.967611-1-dmatlack@google.com/
v1: https://lore.kernel.org/kvm/20251126193608.2678510-1-dmatlack@google.com/
rfc: https://lore.kernel.org/kvm/20251018000713.677779-1-vipinsh@google.com/


David Matlack (12):
  PCI: liveupdate: Set up FLB handler for the PCI core
  PCI: liveupdate: Track outgoing preserved PCI devices
  PCI: liveupdate: Track incoming preserved PCI devices
  PCI: liveupdate: Document driver binding responsibilities
  PCI: liveupdate: Keep bus numbers constant during Live Update
  PCI: liveupdate: Auto-preserve upstream bridges across Live Update
  PCI: Refactor matching logic for pci_dev_acs_ops
  PCI: liveupdate: Inherit ACS flags in incoming preserved devices
  PCI: liveupdate: Inherit ARI Forwarding Enable on preserved bridges
  PCI: liveupdate: Freeze preservation status during shutdown
  PCI: liveupdate: Do not disable bus mastering on preserved devices
    during kexec
  Documentation: PCI: Add documentation for Live Update

 Documentation/PCI/index.rst                   |   1 +
 Documentation/PCI/liveupdate.rst              |  29 +
 .../admin-guide/kernel-parameters.txt         |   6 +-
 Documentation/core-api/liveupdate.rst         |   5 +
 MAINTAINERS                                   |  15 +
 drivers/pci/Kconfig                           |  15 +
 drivers/pci/Makefile                          |   1 +
 drivers/pci/liveupdate.c                      | 910 ++++++++++++++++++
 drivers/pci/liveupdate.h                      |  68 ++
 drivers/pci/pci-driver.c                      |   9 +-
 drivers/pci/pci.c                             |  14 +-
 drivers/pci/pci.h                             |   5 +
 drivers/pci/probe.c                           |  22 +-
 drivers/pci/quirks.c                          |  58 +-
 include/linux/kho/abi/pci.h                   |  59 ++
 include/linux/pci.h                           |   4 +
 include/linux/pci_liveupdate.h                |  77 ++
 17 files changed, 1260 insertions(+), 38 deletions(-)
 create mode 100644 Documentation/PCI/liveupdate.rst
 create mode 100644 drivers/pci/liveupdate.c
 create mode 100644 drivers/pci/liveupdate.h
 create mode 100644 include/linux/kho/abi/pci.h
 create mode 100644 include/linux/pci_liveupdate.h


base-commit: 1354afac14579ad38279f12d660df961b5f20246
-- 
2.55.0.795.g602f6c329a-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2026-07-10 21:26 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10 21:26 [PATCH v7 00/12] PCI: liveupdate: PCI core support for Live Update David Matlack
2026-07-10 21:26 ` [PATCH v7 01/12] PCI: liveupdate: Set up FLB handler for the PCI core David Matlack
2026-07-10 21:26 ` [PATCH v7 02/12] PCI: liveupdate: Track outgoing preserved PCI devices David Matlack
2026-07-10 21:26 ` [PATCH v7 03/12] PCI: liveupdate: Track incoming " David Matlack
2026-07-10 21:26 ` [PATCH v7 04/12] PCI: liveupdate: Document driver binding responsibilities David Matlack
2026-07-10 21:26 ` [PATCH v7 05/12] PCI: liveupdate: Keep bus numbers constant during Live Update David Matlack
2026-07-10 21:26 ` [PATCH v7 06/12] PCI: liveupdate: Auto-preserve upstream bridges across " David Matlack
2026-07-10 21:26 ` [PATCH v7 07/12] PCI: Refactor matching logic for pci_dev_acs_ops David Matlack
2026-07-10 21:26 ` [PATCH v7 08/12] PCI: liveupdate: Inherit ACS flags in incoming preserved devices David Matlack
2026-07-10 21:26 ` [PATCH v7 09/12] PCI: liveupdate: Inherit ARI Forwarding Enable on preserved bridges David Matlack
2026-07-10 21:26 ` [PATCH v7 10/12] PCI: liveupdate: Freeze preservation status during shutdown David Matlack
2026-07-10 21:26 ` [PATCH v7 11/12] PCI: liveupdate: Do not disable bus mastering on preserved devices during kexec David Matlack
2026-07-10 21:26 ` [PATCH v7 12/12] Documentation: PCI: Add documentation for Live Update David Matlack

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox