Re: [PATCH v4 02/11] PCI: liveupdate: Track outgoing preserved PCI devices
From: Samiullah Khawaja
Date: Tue Apr 28 2026 - 13:37:52 EST
On Tue, Apr 28, 2026 at 05:24:53PM +0000, Samiullah Khawaja wrote:
On Thu, Apr 23, 2026 at 09:23:06PM +0000, David Matlack wrote:
Add APIs to allow drivers to notify the PCI core of which devices are
being preserved across a Live Update for the next kernel, i.e.
"outgoing" devices.
Drivers must notify the PCI core when devices are preserved so that the
PCI core can update its FLB data (struct pci_ser) and track the list of
outgoing devices. pci_liveupdate_preserve() notifies the PCI core that a
device must be preserved across Live Update. pci_liveupdate_unpreserve()
reverses this (cancels the preservation of the device).
This tracking ensures the PCI core is fully aware of which devices may
need special handling during shutdown and kexec, and so that it can be
handed off to the next kernel.
Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx>
---
drivers/pci/liveupdate.c | 101 ++++++++++++++++++++++++++++++++++++
include/linux/kho/abi/pci.h | 7 +--
include/linux/pci.h | 26 ++++++++++
3 files changed, 131 insertions(+), 3 deletions(-)
diff --git a/include/linux/kho/abi/pci.h b/include/linux/kho/abi/pci.h
index 5c0e92588c00..5b4c8d9e462c 100644
--- a/include/linux/kho/abi/pci.h
+++ b/include/linux/kho/abi/pci.h
@@ -23,19 +23,20 @@
* incrementing the version number in the PCI_LUO_FLB_COMPATIBLE string.
*/
-#define PCI_LUO_FLB_COMPATIBLE "pci-v1"
+#define PCI_LUO_FLB_COMPATIBLE "pci-v2"
/**
* struct pci_dev_ser - Serialized state about a single PCI device.
*
* @domain: The device's PCI domain number (segment).
* @bdf: The device's PCI bus, device, and function number.
- * @reserved: Reserved (to naturally align struct pci_dev_ser).
+ * @refcount: Reference count used by the PCI core to keep track of whether it
+ * is done using a device's struct pci_dev_ser.
nit: I was wondering why is this named refcount and why it is needed. It
seems you are using it to track the preservation dependency between
parent devices and leaf. Maybe add a comment to clarify that.
*/
struct pci_dev_ser {
u32 domain;
u16 bdf;
- u16 reserved;
+ u16 refcount;
} __packed;
/**
Sami