On (Fri) 16 Dec 2011 [09:14:26], zanghongyong@xxxxxxxxxx wrote: > From: Hongyong Zang <zanghongyong@xxxxxxxxxx> > > In pci_enable_msix(), the guest's virtio-serial driver tries to set msi-x > with one vector per queue. But it fails and eventually all virtio-serial > ports share one MSI-X vector. Because every virtio-serial port has *two* > virtqueues, virtio-serial needs (port+1)*2 vectors other than (port+1). Ouch, good catch. One comment below: > This patch allows every virtqueue to have its own MSI-X vector. > (When the MSI-X vectors needed are more than MSIX_MAX_ENTRIES defined in > qemu: msix.c, all the queues still share one MSI-X vector as before.) > > Signed-off-by: Hongyong Zang <zanghongyong@xxxxxxxxxx> > --- > hw/virtio-pci.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c > index 77b75bc..2c9c6fb 100644 > --- a/hw/virtio-pci.c > +++ b/hw/virtio-pci.c > @@ -718,8 +718,11 @@ static int virtio_serial_init_pci(PCIDevice *pci_dev) > return -1; > } > vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED > - ? proxy->serial.max_virtserial_ports + 1 > + ? (proxy->serial.max_virtserial_ports + 1) * 2 > : proxy->nvectors; > + /*msix.c: #define MSIX_MAX_ENTRIES 32*/ > + if (vdev->nvectors > 32) > + vdev->nvectors = 32; This change isn't needed: if the proxy->nvectors value exceeds the max allowed, virtio_init_pci() will end up using a shared vector instead of separate ones. Thanks, Amit -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html