RE: [RFC PATCH 1/1] vfio/pci: Disable sriov on PF device close
From: Tian, Kevin
Date: Wed Aug 05 2026 - 06:06:16 EST
> From: Samiullah Khawaja <skhawaja@xxxxxxxxxx>
> Sent: Wednesday, August 5, 2026 8:34 AM
>
> When userspace closes a VFIO device file descriptor, the vfio driver
> performs a hardware reset on the PCIe device to ensure it is returned to
> a clean state. However, if the closed device is an SR-IOV Physical
> Function (PF), it may have instantiated Virtual Functions (VFs) that are
> actively bound to host kernel drivers (or other vfio instances).
>
> When the PF is hardware-reset via VFIO, it implicitly disrupts SR-IOV
> operations at the device level. Because this reset happens without notifying
> the core PCI driver model, the kernel drivers bound to the VFs remain loaded
> and operate under the assumption that the VF hardware is still functional.
>
> This creates a state mismatch between the kernel's view of the hardware
> and the actual device state. Subsequent attempts by the host OS or bound
> drivers to interact with the VFs will fail, leading to unexpected
> errors.
>
> Disable SR-IOV on the device prior to issuing the PF reset so that the
> VFs can teardown and remove at the software level also.
>
> Signed-off-by: Samiullah Khawaja <skhawaja@xxxxxxxxxx>
> ---
> drivers/vfio/pci/vfio_pci_core.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
> index a113c55845e1..b36c77eb3c40 100644
> --- a/drivers/vfio/pci/vfio_pci_core.c
> +++ b/drivers/vfio/pci/vfio_pci_core.c
> @@ -826,6 +826,13 @@ void vfio_pci_core_close_device(struct vfio_device
> *core_vdev)
> #if IS_ENABLED(CONFIG_EEH)
> eeh_dev_release(vdev->pdev);
> #endif
> +
> + if (pci_num_vf(vdev->pdev)) {
> + device_lock(&vdev->pdev->dev);
> + vfio_pci_core_sriov_configure(vdev, 0);
> + device_unlock(&vdev->pdev->dev);
> + }
> +
Sashiko reported several locking issues with this change:
https://sashiko.dev/#/patchset/20260805003355.728299-2-skhawaja%40google.com
Actually it is a discouraged usage allowing kernel drivers bound to VFs
which belongs to a PF owned by vfio userspace.
vfio_pci_bus_notifier prints a warning message upon
BUS_NOTIFY_BOUND_DRIVER:
"VF %s bound to driver %s while PF bound to driver %s\n"
Fixing this alone is insufficient to remove that warning...