summaryrefslogtreecommitdiff
path: root/drivers/vfio
diff options
context:
space:
mode:
authorPiotr Piórkowski <piotr.piorkowski@intel.com>2026-03-09 16:24:49 +0100
committerMichał Winiarski <michal.winiarski@intel.com>2026-03-24 10:47:52 +0100
commit9e60ee0e6dc2c81e0e5b285d09807a361f6745ce (patch)
tree4c80ce566199696951c0e32edfee4ac50e469472 /drivers/vfio
parent2de36e3f72dae2035b2742ffe3355e43067a81ad (diff)
downloadlinux-next-9e60ee0e6dc2c81e0e5b285d09807a361f6745ce.tar.gz
linux-next-9e60ee0e6dc2c81e0e5b285d09807a361f6745ce.zip
vfio/xe: Notify PF about VF FLR in reset_prepare
Hook into the PCI error handler reset_prepare() callback to notify the PF about an upcoming VF FLR before reset_done() is executed. This enables early FLR_PREPARE signaling and ensures that the PF is aware of the reset before the completion wait begins. Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com> Cc: Michał Winiarski <michal.winiarski@intel.com> Reviewed-by: Michał Winiarski <michal.winiarski@intel.com> Reviewed-by: Alex Williamson <alex@shazbot.org> Link: https://patch.msgid.link/20260309152449.910636-3-piotr.piorkowski@intel.com Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Diffstat (limited to 'drivers/vfio')
-rw-r--r--drivers/vfio/pci/xe/main.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/vfio/pci/xe/main.c b/drivers/vfio/pci/xe/main.c
index fff95b2d5dde..88acfcf840fc 100644
--- a/drivers/vfio/pci/xe/main.c
+++ b/drivers/vfio/pci/xe/main.c
@@ -85,6 +85,19 @@ again:
spin_unlock(&xe_vdev->reset_lock);
}
+static void xe_vfio_pci_reset_prepare(struct pci_dev *pdev)
+{
+ struct xe_vfio_pci_core_device *xe_vdev = pci_get_drvdata(pdev);
+ int ret;
+
+ if (!pdev->is_virtfn)
+ return;
+
+ ret = xe_sriov_vfio_flr_prepare(xe_vdev->xe, xe_vdev->vfid);
+ if (ret)
+ dev_err(&pdev->dev, "Failed to prepare FLR: %d\n", ret);
+}
+
static void xe_vfio_pci_reset_done(struct pci_dev *pdev)
{
struct xe_vfio_pci_core_device *xe_vdev = pci_get_drvdata(pdev);
@@ -127,6 +140,7 @@ static void xe_vfio_pci_reset_done(struct pci_dev *pdev)
}
static const struct pci_error_handlers xe_vfio_pci_err_handlers = {
+ .reset_prepare = xe_vfio_pci_reset_prepare,
.reset_done = xe_vfio_pci_reset_done,
.error_detected = vfio_pci_core_aer_err_detected,
};