The MSI/X shutdown path can gratuitously enable INTx, which is not
something we want to happen if we're dealing with broken INTx device.

Signed-off-by: Alex Williamson <alex.william...@redhat.com>
---
 drivers/vfio/pci/vfio_pci_intrs.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/vfio/pci/vfio_pci_intrs.c 
b/drivers/vfio/pci/vfio_pci_intrs.c
index 152b438..aa23e9a 100644
--- a/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/drivers/vfio/pci/vfio_pci_intrs.c
@@ -414,6 +414,13 @@ static void vfio_msi_disable(struct vfio_pci_device *vdev, 
bool msix)
        } else
                pci_disable_msi(pdev);
 
+       /*
+        * Both disable paths above use pci_intx_for_msi() to clear DisINTx
+        * via their shutdown paths.  Restore for NoINTx devices.
+        */
+       if (vdev->nointx)
+               pci_intx(pdev, 0);
+
        vdev->irq_type = VFIO_PCI_NUM_IRQS;
        vdev->num_ctx = 0;
        kfree(vdev->ctx);

Reply via email to