summaryrefslogtreecommitdiff
path: root/lib/netdev-dummy.c
diff options
context:
space:
mode:
authorWilliam Tu <u9012063@gmail.com>2016-07-18 17:05:35 -0700
committerDaniele Di Proietto <diproiettod@vmware.com>2016-07-21 16:46:32 -0700
commit64839cf4325198e6ba845de72efd7c7a726c62a1 (patch)
treed23341a59d84f2d59bad4aa0b986ee81ed800b34 /lib/netdev-dummy.c
parentb52388e6c49702c4245f2254b11d669d7f7c9a83 (diff)
downloadopenvswitch-64839cf4325198e6ba845de72efd7c7a726c62a1.tar.gz
netdev-provider: Apply batch object to netdev provider.
Commit 1895cc8dbb64 ("dpif-netdev: create batch object") introduces batch process functions and 'struct dp_packet_batch' to associate with batch-level metadata. This patch applies the packet batch object to the netdev provider interface (dummy, Linux, BSD, and DPDK) so that batch APIs can be used in providers. With batch metadata visible in providers, optimizations can be introduced at per-batch level instead of per-packet. Tested-at: https://travis-ci.org/williamtu/ovs-travis/builds/145694197 Signed-off-by: William Tu <u9012063@gmail.com> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Diffstat (limited to 'lib/netdev-dummy.c')
-rw-r--r--lib/netdev-dummy.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index 9ea765b33..37c6b0226 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -947,8 +947,7 @@ netdev_dummy_rxq_dealloc(struct netdev_rxq *rxq_)
}
static int
-netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet **arr,
- int *c)
+netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch)
{
struct netdev_rxq_dummy *rx = netdev_rxq_dummy_cast(rxq_);
struct netdev_dummy *netdev = netdev_dummy_cast(rx->up.netdev);
@@ -991,8 +990,8 @@ netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet **arr,
dp_packet_pad(packet);
- arr[0] = packet;
- *c = 1;
+ batch->packets[0] = packet;
+ batch->count = 1;
return 0;
}
@@ -1030,17 +1029,17 @@ netdev_dummy_rxq_drain(struct netdev_rxq *rxq_)
static int
netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
- struct dp_packet **pkts, int cnt, bool may_steal)
+ struct dp_packet_batch *batch, bool may_steal)
{
struct netdev_dummy *dev = netdev_dummy_cast(netdev);
int error = 0;
int i;
- for (i = 0; i < cnt; i++) {
- const void *buffer = dp_packet_data(pkts[i]);
- size_t size = dp_packet_size(pkts[i]);
+ for (i = 0; i < batch->count; i++) {
+ const void *buffer = dp_packet_data(batch->packets[i]);
+ size_t size = dp_packet_size(batch->packets[i]);
- size -= dp_packet_get_cutlen(pkts[i]);
+ size -= dp_packet_get_cutlen(batch->packets[i]);
if (size < ETH_HEADER_LEN) {
error = EMSGSIZE;
@@ -1096,11 +1095,7 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
ovs_mutex_unlock(&dev->mutex);
}
- if (may_steal) {
- for (i = 0; i < cnt; i++) {
- dp_packet_delete(pkts[i]);
- }
- }
+ dp_packet_delete_batch(batch, may_steal);
return error;
}