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


Reply via email to