On 03/04/2014 11:26 AM, Gonglei (Arei) wrote: >> -----Original Message----- >> From: qemu-devel-bounces+arei.gonglei=huawei....@nongnu.org >> [mailto:qemu-devel-bounces+arei.gonglei=huawei....@nongnu.org] On >> Behalf Of Jason Wang >> Sent: Friday, February 21, 2014 5:05 PM >> To: aligu...@amazon.com; m...@redhat.com; qemu-devel@nongnu.org >> Cc: Paolo Bonzini; Jason Wang >> Subject: [Qemu-devel] [PATCH V2] virtio-net: calculate proper msix vectors on >> init >> >> 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 | 8 +++++++- >> 1 file changed, 7 insertions(+), 1 deletion(-) >> >> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c >> index 7b91841..3b3b0e2 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,11 @@ 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; >> + } >> >> virtio_net_set_config_size(&dev->vdev, vpci_dev->host_features); >> virtio_net_set_netclient_name(&dev->vdev, qdev->id, >> -- >> 1.8.3.2 >> > Good catch. > > Reviewed-by: Gonglei <arei.gong...@huawei.com> > > > Best regards, > -Gonglei >
Thanks for the reviewing. The patch has one issue that it may breaks the migration if "vectors=" was not specified. I will post a new version. Thanks