On 02/23/2014 02:34 PM, Michael S. Tsirkin wrote: > On Fri, Feb 21, 2014 at 01:00:57PM +0800, Jason Wang wrote: >> Currently, the default msix vectors for virtio-net-pci is 3 which is >> obvious not suitable for multiqueue guest, so we depends on the user >> or management tools to pass a correct vectors parameter. In fact, we >> can simplifying this by calculate the number of vectors on init. >> >> Consider we have N queues, the number of vectors needed is 2*N + 2 >> (plus one config interrupt and control vq). We didn't check whether or >> not host support control vq because it was added unconditionally by >> qemu to avoid breaking legacy guests such as Minix. >> >> Cc: Paolo Bonzini <pbonz...@redhat.com> >> Cc: Michael S. Tsirkin <m...@redhat.com> >> Signed-off-by: Jason Wang <jasow...@redhat.com> >> --- >> hw/virtio/virtio-pci.c | 10 +++++++++- >> 1 file changed, 9 insertions(+), 1 deletion(-) >> >> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c >> index 7b91841..1dec491 100644 >> --- a/hw/virtio/virtio-pci.c >> +++ b/hw/virtio/virtio-pci.c >> @@ -1416,7 +1416,8 @@ static const TypeInfo virtio_serial_pci_info = { >> static Property virtio_net_properties[] = { >> DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, >> VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false), >> - DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), >> + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, >> + DEV_NVECTORS_UNSPECIFIED), >> DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features), >> DEFINE_NIC_PROPERTIES(VirtIONetPCI, vdev.nic_conf), >> DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetPCI, vdev.net_conf), >> @@ -1428,6 +1429,13 @@ static int virtio_net_pci_init(VirtIOPCIProxy >> *vpci_dev) >> DeviceState *qdev = DEVICE(vpci_dev); >> VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev); >> DeviceState *vdev = DEVICE(&dev->vdev); >> + VirtIONet *net = VIRTIO_NET(&dev->vdev); >> + >> + if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) { >> + vpci_dev->nvectors = 2 * MAX(net->nic_conf.queues, 1) + 2; >> + } >> + >> + fprintf(stderr, "vectors is %d\n", vpci_dev->nvectors); > last lin shouldn't be there obviously.
True, I've sent V2 to the list, please have a look. Thanks >> >> virtio_net_set_config_size(&dev->vdev, vpci_dev->host_features); >> virtio_net_set_netclient_name(&dev->vdev, qdev->id, >> -- >> 1.8.3.2