From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34425) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WKnNY-00020D-5c for qemu-devel@nongnu.org; Tue, 04 Mar 2014 06:19:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WKnNT-0006pP-Oz for qemu-devel@nongnu.org; Tue, 04 Mar 2014 06:19:20 -0500 Received: from szxga01-in.huawei.com ([119.145.14.64]:53721) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WKnNS-0006oh-Sb for qemu-devel@nongnu.org; Tue, 04 Mar 2014 06:19:15 -0500 Message-ID: <5315B68B.80405@huawei.com> Date: Tue, 4 Mar 2014 19:18:35 +0800 From: Gonglei MIME-Version: 1.0 References: <1392973519-5371-1-git-send-email-jasowang@redhat.com> <33183CC9F5247A488A2544077AF19020815D41F8@SZXEMA503-MBS.china.huawei.com> <531583A7.60901@redhat.com> In-Reply-To: <531583A7.60901@redhat.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: Jason Wang Cc: Paolo Bonzini , "qemu-devel@nongnu.org" , "aliguori@amazon.com" , "mst@redhat.com" On 2014/3/4 15:41, Jason Wang wrote: > 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. > Yes, you are right, Jason. You need to add backwards-compatibility properties in hw/pc.h Best regards, -Gonglei