From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53993) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WKjz3-0002Rh-Ae for qemu-devel@nongnu.org; Tue, 04 Mar 2014 02:41:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WKjyx-0007k3-OH for qemu-devel@nongnu.org; Tue, 04 Mar 2014 02:41:49 -0500 Received: from mx1.redhat.com ([209.132.183.28]:2624) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WKjyx-0007jy-GB for qemu-devel@nongnu.org; Tue, 04 Mar 2014 02:41:43 -0500 Message-ID: <531583A7.60901@redhat.com> Date: Tue, 04 Mar 2014 15:41:27 +0800 From: Jason Wang MIME-Version: 1.0 References: <1392973519-5371-1-git-send-email-jasowang@redhat.com> <33183CC9F5247A488A2544077AF19020815D41F8@SZXEMA503-MBS.china.huawei.com> In-Reply-To: <33183CC9F5247A488A2544077AF19020815D41F8@SZXEMA503-MBS.china.huawei.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH V2] virtio-net: calculate proper msix vectors on init List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Gonglei (Arei)" , "aliguori@amazon.com" , "mst@redhat.com" , "qemu-devel@nongnu.org" Cc: Paolo Bonzini On 03/04/2014 11:26 AM, Gonglei (Arei) wrote: >> -----Original Message----- >> From: qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org >> [mailto:qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org] On >> Behalf Of Jason Wang >> Sent: Friday, February 21, 2014 5:05 PM >> To: aliguori@amazon.com; mst@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 >> Cc: Michael S. Tsirkin >> Signed-off-by: Jason Wang >> --- >> 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 > > > Best regards, > -Gonglei > Hi Gonglei: Thanks for the reviewing. Looks like this patch has a bug which will break the migration if "vectors=" is not specified. Will post a new version.