vp_find_vqs_intx() sets up the admin virtqueue using queue_idx++ (a sequential counter) instead of avq->vq_index (the actual transport queue index). The MSI-X path in vp_find_vqs_msix() correctly uses avq->vq_index. When the admin VQ index does not equal the next sequential queue_idx value, the INTx path binds the admin VQ to the wrong transport queue.
Use avq->vq_index to match the MSI-X path. Signed-off-by: Andrew Stellman <[email protected]> --- drivers/virtio/virtio_pci_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index da97b6a..0b9d66b 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c @@ -497,7 +497,7 @@ static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs, if (!avq_num) return 0; sprintf(avq->name, "avq.%u", avq->vq_index); - vq = vp_setup_vq(vdev, queue_idx++, vp_modern_avq_done, avq->name, + vq = vp_setup_vq(vdev, avq->vq_index, vp_modern_avq_done, avq->name, false, VIRTIO_MSI_NO_VECTOR, &vp_dev->admin_vq.info); if (IS_ERR(vq)) { -- 2.34.1
