summaryrefslogtreecommitdiff
path: root/include/linux/pci_liveupdate.h
diff options
context:
space:
mode:
authorDavid Matlack <dmatlack@google.com>2026-09-18 20:06:28 +0000
committerPasha Tatashin <pasha.tatashin@soleen.com>2026-09-28 15:37:55 +0000
commitb7163342c1d4090bdd3eace61580197b2372bd34 (patch)
tree01d918483c3616dad85424ec881c91733aa7bad3 /include/linux/pci_liveupdate.h
parentb9affdf3de08c9e5fd8dca0c0bc9c54041362a10 (diff)
downloadlinux-next-b7163342c1d4090bdd3eace61580197b2372bd34.tar.gz
linux-next-b7163342c1d4090bdd3eace61580197b2372bd34.zip
PCI: liveupdate: Track outgoing preserved PCI devices
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 the list of preserved devices can be handed off to the next kernel. For now, the API only supports preserving non-VF devices on a root bus (not behind an PCI-to-PCI bridges). Reviewed-by: Pranjal Shrivastava <praan@google.com> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Signed-off-by: David Matlack <dmatlack@google.com> Link: https://patch.msgid.link/20260918200640.887030-3-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Diffstat (limited to 'include/linux/pci_liveupdate.h')
-rw-r--r--include/linux/pci_liveupdate.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/linux/pci_liveupdate.h b/include/linux/pci_liveupdate.h
index 8ec98beefcb4..894052ad6961 100644
--- a/include/linux/pci_liveupdate.h
+++ b/include/linux/pci_liveupdate.h
@@ -8,14 +8,26 @@
#ifndef LINUX_PCI_LIVEUPDATE_H
#define LINUX_PCI_LIVEUPDATE_H
+#include <linux/kho/abi/pci.h>
#include <linux/liveupdate.h>
+#include <linux/spinlock_types.h>
#include <linux/types.h>
+/**
+ * struct pci_liveupdate - PCI Live Update state for a struct pci_dev
+ * @outgoing: State preserved for the next kernel.
+ */
+struct pci_liveupdate {
+ struct pci_dev_ser *outgoing;
+};
+
struct pci_dev;
#ifdef CONFIG_PCI_LIVEUPDATE
int pci_liveupdate_register_flb(struct liveupdate_file_handler *fh);
void pci_liveupdate_unregister_flb(struct liveupdate_file_handler *fh);
+int pci_liveupdate_preserve(struct pci_dev *dev);
+void pci_liveupdate_unpreserve(struct pci_dev *dev);
#else
static inline int pci_liveupdate_register_flb(struct liveupdate_file_handler *fh)
{
@@ -25,6 +37,15 @@ static inline int pci_liveupdate_register_flb(struct liveupdate_file_handler *fh
static inline void pci_liveupdate_unregister_flb(struct liveupdate_file_handler *fh)
{
}
+
+static inline int pci_liveupdate_preserve(struct pci_dev *dev)
+{
+ return -EOPNOTSUPP;
+}
+
+static inline void pci_liveupdate_unpreserve(struct pci_dev *dev)
+{
+}
#endif
#endif /* LINUX_PCI_LIVEUPDATE_H */