diff options
author | William Tu <u9012063@gmail.com> | 2016-07-18 17:05:35 -0700 |
---|---|---|
committer | Daniele Di Proietto <diproiettod@vmware.com> | 2016-07-21 16:46:32 -0700 |
commit | 64839cf4325198e6ba845de72efd7c7a726c62a1 (patch) | |
tree | d23341a59d84f2d59bad4aa0b986ee81ed800b34 /lib/netdev-dummy.c | |
parent | b52388e6c49702c4245f2254b11d669d7f7c9a83 (diff) | |
download | openvswitch-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.c | 23 |
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; } |