Hello,

On 12/19/25 10:26, Victor Zhao wrote:
When vfio_pci_pre_reset() disables MSI/MSI-X, the device may fall back
to INTx mode. The code then clears PCI_COMMAND_INTX_DISABLE, allowing
the device to assert INTx. Since interrupt handlers have already been
removed, this causes unhandled interrupts and kernel "nobody cared"
warnings.

Could you tell us which device you are using ?

Fix by not clearing PCI_COMMAND_INTX_DISABLE. The device reset will
restore it to default state.

INTx disable is a complex topic. It is checked and set in different
places in the kernel too to avoid spurious interrupts. The DisINTx
default value should be 0, like for IO, MEM and MASTER  though.

But some device have broken support: commit 450744051d20 ("vfio/pci:
Hide broken INTx support from user") and routine
pci_intx_mask_supported(). I lack the historical background.


Alex,

What's your opinion ?

Thanks,

C.



Cc: [email protected]
Signed-off-by: Victor Zhao <[email protected]>
---
  hw/vfio/pci.c | 8 ++------
  1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index b46b1305a7..1681134cf2 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -2616,13 +2616,9 @@ void vfio_pci_pre_reset(VFIOPCIDevice *vdev)
vfio_disable_interrupts(vdev); - /*
-     * Stop any ongoing DMA by disconnecting I/O, MMIO, and bus master.
-     * Also put INTx Disable in known state.
-     */
+    /* Stop any ongoing DMA by disconnecting I/O, MMIO, and bus master. */
      cmd = vfio_pci_read_config(pdev, PCI_COMMAND, 2);
-    cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
-             PCI_COMMAND_INTX_DISABLE);
+    cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
      vfio_pci_write_config(pdev, PCI_COMMAND, cmd, 2);
/* Make sure the device is in D0 */


Reply via email to