diff mbox series

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

Message ID 20250320194145.2816379-1-alex.williamson@redhat.com (mailing list archive)
State New
Headers show
Series vfio/pci: Virtualize zero INTx PIN if no pdev->irq | expand

Commit Message

Alex Williamson March 20, 2025, 7:41 p.m. UTC
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/
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---

Applies over https://lore.kernel.org/all/20250311230623.1264283-1-alex.williamson@redhat.com/

 drivers/vfio/pci/vfio_pci_config.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Shivaprasad G Bhat March 21, 2025, 4:12 a.m. UTC | #1
On 3/21/25 1:11 AM, Alex Williamson wrote:
> 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/
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>

Thank you Alex!


Tested-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>

Regards,

Shivaprasad
diff mbox series

Patch

diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
index 14437396d721..8f02f236b5b4 100644
--- a/drivers/vfio/pci/vfio_pci_config.c
+++ b/drivers/vfio/pci/vfio_pci_config.c
@@ -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);