virtio_pci: fix announcement of MSI-X interrupts for queues

Queues that do not need interrupts - for instance, output queues - do
not have a corresponding entry in vtpci_msix_vq_interrupts.
So, it was wrong to increment a pointer into that array when iterating
over such a queue.

I ran into this bug while trying to use virtio_console(4) that allocates
a lot of queues with every other being an output queue without an
interrupt handler (if MultiplePorts feature is negotiated).

MFC after:	2 weeks
This commit is contained in:
Andriy Gapon 2016-11-24 21:32:04 +00:00
parent 8be1b98cae
commit 18ec6fbc3a

View File

@ -1087,7 +1087,8 @@ vtpci_set_host_msix_vectors(struct vtpci_softc *sc)
* For shared MSIX, all the virtqueues share the first
* interrupt.
*/
if ((sc->vtpci_flags & VTPCI_FLAG_SHARED_MSIX) == 0)
if (!sc->vtpci_vqs[idx].vtv_no_intr &&
(sc->vtpci_flags & VTPCI_FLAG_SHARED_MSIX) == 0)
intr++;
}