From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60206) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WHnca-0006Dx-P9 for qemu-devel@nongnu.org; Sun, 23 Feb 2014 23:58:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WHncU-0006uL-Nq for qemu-devel@nongnu.org; Sun, 23 Feb 2014 23:58:28 -0500 Received: from mx1.redhat.com ([209.132.183.28]:16830) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WHncU-0006uA-FB for qemu-devel@nongnu.org; Sun, 23 Feb 2014 23:58:22 -0500 Message-ID: <530AD164.3000603@redhat.com> Date: Mon, 24 Feb 2014 12:58:12 +0800 From: Jason Wang MIME-Version: 1.0 References: <1392958857-10965-1-git-send-email-jasowang@redhat.com> <20140223063445.GB10908@redhat.com> In-Reply-To: <20140223063445.GB10908@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: Paolo Bonzini , qemu-devel@nongnu.org, aliguori@amazon.com 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 >> Cc: Michael S. Tsirkin >> Signed-off-by: Jason Wang >> --- >> 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