vfio/pci: Virtualize zero INTx PIN if no pdev->irq

JIRA: https://issues.redhat.com/browse/RHEL-118213

commit 2bd42b03ab6b04dde1753bd6b38eeca5c70f3941
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Thu Mar 20 13:41:42 2025 -0600

    vfio/pci: Virtualize zero INTx PIN if no pdev->irq

    Typically pdev->irq is consistent with whether the device itself
    supports INTx, where device support is reported via the PIN register.
    Therefore the PIN register is often already zero if pdev->irq is zero.

    Recently virtualization of the PIN register was expanded to include
    the case where the device supports INTx but the platform does not
    route the interrupt.  This is reported by a value of IRQ_NOTCONNECTED
    on some architectures.  Other architectures just report zero for
    pdev->irq.

    We already disallow INTx setup if pdev->irq is zero, therefore add
    this to the PIN register virtualization criteria so that a consistent
    view is provided to userspace through virtualized config space and
    ioctls.

    Reported-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
    Link: https://lore.kernel.org/all/174231895238.2295.12586708771396482526.stgit@linux.ibm.com/
    Tested-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
    Link: https://lore.kernel.org/r/20250320194145.2816379-1-alex.williamson@redhat.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
Alex Williamson
2025-10-07 15:26:29 -06:00
parent 3e7b609f22
commit b09c5f107b
+1 -1
View File
@@ -1815,7 +1815,7 @@ int vfio_config_init(struct vfio_pci_core_device *vdev)
}
if (!IS_ENABLED(CONFIG_VFIO_PCI_INTX) || vdev->nointx ||
vdev->pdev->irq == IRQ_NOTCONNECTED)
!vdev->pdev->irq || vdev->pdev->irq == IRQ_NOTCONNECTED)
vconfig[PCI_INTERRUPT_PIN] = 0;
ret = vfio_cap_init(vdev);