[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 8/9] virtio net: enable dataplane for virtio net
From: |
Liu Ping Fan |
Subject: |
[Qemu-devel] [PATCH 8/9] virtio net: enable dataplane for virtio net |
Date: |
Thu, 21 Feb 2013 20:54:52 +0800 |
From: Liu Ping Fan <address@hidden>
Signed-off-by: Liu Ping Fan <address@hidden>
---
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, "/address@hidden");
+#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),
--
1.7.4.4
- Re: [Qemu-devel] [PATCH 3/9] event poll: make epoll work for normal fd, (continued)
- [Qemu-devel] [PATCH 4/9] event poll: pass event type to event callback, Liu Ping Fan, 2013/02/21
- [Qemu-devel] [PATCH 5/9] event poll: enable event poll handle more than one event each time, Liu Ping Fan, 2013/02/21
- [Qemu-devel] [PATCH 6/9] virtio net: introduce dataplane for virtio net, Liu Ping Fan, 2013/02/21
- [Qemu-devel] [PATCH 7/9] tap: make tap peer work on dedicated data-plane thread, Liu Ping Fan, 2013/02/21
- [Qemu-devel] [PATCH 8/9] virtio net: enable dataplane for virtio net,
Liu Ping Fan <=
- [Qemu-devel] [PATCH 9/9] configure: make virtio net dataplane configurable, Liu Ping Fan, 2013/02/21
- [Qemu-devel] [PATCH 1/9] vring: split the modification and publish of used ring, Liu Ping Fan, 2013/02/21
- Re: [Qemu-devel] [PATCH 0/9] introduce virtio net dataplane, Michael S. Tsirkin, 2013/02/21