From patchwork Thu Feb 21 12:54:52 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: pingfan liu X-Patchwork-Id: 222293 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C6FC72C0082 for ; Fri, 22 Feb 2013 01:09:03 +1100 (EST) Received: from localhost ([::1]:39940 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U8Vhl-0002rf-56 for incoming@patchwork.ozlabs.org; Thu, 21 Feb 2013 07:56:53 -0500 Received: from eggs.gnu.org ([208.118.235.92]:59723) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U8VhS-0002J3-5r for qemu-devel@nongnu.org; Thu, 21 Feb 2013 07:56:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U8VhI-0002XL-DD for qemu-devel@nongnu.org; Thu, 21 Feb 2013 07:56:33 -0500 Received: from mail-da0-f46.google.com ([209.85.210.46]:57067) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U8VhI-0002XE-4L for qemu-devel@nongnu.org; Thu, 21 Feb 2013 07:56:24 -0500 Received: by mail-da0-f46.google.com with SMTP id p5so4117341dak.33 for ; Thu, 21 Feb 2013 04:56:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=YZGUyq8O9F6XZrDIOVJG5kl8XV3KJC2v0yaokzhRNME=; b=fxXm0d3nSIoD2bbxe8mnmZxo21u/fpHCsMFYJBkKmUuHAoVk9XWASyAf8RGj/CkGcs M5kTOg2xeCpP8r3ATogy790NrUMYQMTLJpIZy3KZef5G1yLEM4FSSti/e5GTl40tnW+Z /Vaytdt5ZiAFYUnmxbxLZupXLNR08fR7CyZkx/JiXz8lfaO0vnt2BUYfZ8wNaqhSSe8+ pPEv9POEoyLYR05ubhAveIE6IiPGGXbuNGZ5Qi4MkXze3U8xUPkglMuksZfsw8zOeMXV F9BE3SUTzTtApcrTlZSTWegvYbvv2asF7XS9+Jjs5o6orUUDZ7QkPkK+0g4V+nqRlnYQ iw6Q== X-Received: by 10.68.195.33 with SMTP id ib1mr53725634pbc.105.1361451383199; Thu, 21 Feb 2013 04:56:23 -0800 (PST) Received: from localhost ([222.128.155.155]) by mx.google.com with ESMTPS id e6sm114963451paw.16.2013.02.21.04.56.18 (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Thu, 21 Feb 2013 04:56:22 -0800 (PST) From: Liu Ping Fan To: qemu-devel@nongnu.org Date: Thu, 21 Feb 2013 20:54:52 +0800 Message-Id: <1361451293-5181-9-git-send-email-qemulist@gmail.com> X-Mailer: git-send-email 1.7.4.4 In-Reply-To: <1361451293-5181-1-git-send-email-qemulist@gmail.com> References: <1361451293-5181-1-git-send-email-qemulist@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.210.46 Cc: Stefan Hajnoczi , Anthony Liguori Subject: [Qemu-devel] [PATCH 8/9] virtio net: enable dataplane for virtio net X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Liu Ping Fan Signed-off-by: Liu Ping Fan --- hw/virtio-net.c | 38 ++++++++++++++++++++++++++++++++++++++ hw/virtio-net.h | 3 +++ hw/virtio-pci.c | 2 +- 3 files changed, 42 insertions(+), 1 deletions(-) diff --git a/hw/virtio-net.c b/hw/virtio-net.c index 6bf4a40..d9d6c10 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -98,10 +98,32 @@ static void virtio_net_vhost_status(VirtIONet *n, uint8_t status) } } +#ifdef CONFIG_VIRTIO_NET_DATA_PLANE +static void virtio_net_dataplane_status(VirtIONet *n, uint8_t status) +{ + if (!!n->dp_start == virtio_net_started(n, status) && + !n->nic->nc.peer->link_down) { + return; + } + + if (!n->dp_start) { + virtnet_dataplane_start(n); + n->dp_start = true; + } else { + virtnet_dataplane_stop(n); + n->dp_start = false; + } +} +#endif + static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status) { VirtIONet *n = to_virtio_net(vdev); +#ifdef CONFIG_VIRTIO_NET_DATA_PLANE + virtio_net_dataplane_status(n, status); +#endif + virtio_net_vhost_status(n, status); if (!n->tx_waiting) { @@ -422,6 +444,11 @@ static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq) { VirtIONet *n = to_virtio_net(vdev); +#ifdef CONFIG_VIRTIO_NET_DATA_PLANE + if (n->dp_start) { + return; + } +#endif qemu_flush_queued_packets(&n->nic->nc); } @@ -762,6 +789,11 @@ static void virtio_net_handle_tx_bh(VirtIODevice *vdev, VirtQueue *vq) { VirtIONet *n = to_virtio_net(vdev); +#ifdef CONFIG_VIRTIO_NET_DATA_PLANE + if (n->dp_start) { + return; + } +#endif if (unlikely(n->tx_waiting)) { return; } @@ -1034,6 +1066,9 @@ VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf, add_boot_device_path(conf->bootindex, dev, "/ethernet-phy@0"); +#ifdef CONFIG_VIRTIO_NET_DATA_PLANE + virtnet_dataplane_create(n); +#endif return &n->vdev; } @@ -1060,4 +1095,7 @@ void virtio_net_exit(VirtIODevice *vdev) qemu_del_net_client(&n->nic->nc); virtio_cleanup(&n->vdev); +#ifdef CONFIG_VIRTIO_NET_DATA_PLANE + virtnet_dataplane_destroy(n); +#endif } diff --git a/hw/virtio-net.h b/hw/virtio-net.h index ed91a02..4370ed3 100644 --- a/hw/virtio-net.h +++ b/hw/virtio-net.h @@ -218,6 +218,9 @@ void virtio_net_cleanup(NetClientState *nc); #ifdef CONFIG_VIRTIO_NET_DATA_PLANE void virtnet_dataplane_create(VirtIONet *n); +void virtnet_dataplane_start(VirtIONet *n); +void virtnet_dataplane_stop(VirtIONet *n); +void virtnet_dataplane_destroy(VirtIONet *n); #endif #endif diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index c7f0c4d..3c478d7 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -969,7 +969,7 @@ static TypeInfo virtio_blk_info = { }; static Property virtio_net_properties[] = { - DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false), + DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features), DEFINE_NIC_PROPERTIES(VirtIOPCIProxy, nic),