Almost all batch usecases covered by the new API introduced in commit 72c84bc2db23 ("dp-packet: Enhance packet batch APIs.") except unsafe batch addition. It used in dpif-netdev for fast per-flow batches filling. Introduction of this new function will allow to avoid most direct accesses to the batch structure.
Function defined as 'inline' in .h file. Should not impact on performance. Additionally unsafe version now used in dp_packet_batch_clone() to speed up it a little, and also fixed few cases missed while API enchancing. Signed-off-by: Ilya Maximets <i.maxim...@samsung.com> --- lib/dp-packet.h | 11 +++++++++-- lib/dpif-netdev.c | 2 +- lib/netdev-bsd.c | 3 +-- lib/netdev-dummy.c | 3 +-- tests/test-conntrack.c | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/dp-packet.h b/lib/dp-packet.h index 9dbb611..8ab14ce 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -685,11 +685,18 @@ dp_packet_batch_init(struct dp_packet_batch *batch) } static inline void +dp_packet_batch_add_unsafe(struct dp_packet_batch *batch, + struct dp_packet *packet) +{ + batch->packets[batch->count++] = packet; +} + +static inline void dp_packet_batch_add__(struct dp_packet_batch *batch, struct dp_packet *packet, size_t limit) { if (batch->count < limit) { - batch->packets[batch->count++] = packet; + dp_packet_batch_add_unsafe(batch, packet); } else { dp_packet_delete(packet); } @@ -764,7 +771,7 @@ dp_packet_batch_clone(struct dp_packet_batch *dst, dp_packet_batch_init(dst); DP_PACKET_BATCH_FOR_EACH (packet, src) { - dp_packet_batch_add(dst, dp_packet_clone(packet)); + dp_packet_batch_add_unsafe(dst, dp_packet_clone(packet)); } dst->trunc = src->trunc; } diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 8ecc9d1..d60f071 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -4604,7 +4604,7 @@ packet_batch_per_flow_update(struct packet_batch_per_flow *batch, { batch->byte_count += dp_packet_size(packet); batch->tcp_flags |= miniflow_get_tcp_flags(mf); - batch->array.packets[batch->array.count++] = packet; + dp_packet_batch_add_unsafe(&batch->array, packet); } static inline void diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c index 8a4cdb3..92f1253 100644 --- a/lib/netdev-bsd.c +++ b/lib/netdev-bsd.c @@ -640,8 +640,7 @@ netdev_bsd_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) if (retval) { dp_packet_delete(packet); } else { - batch->packets[0] = packet; - batch->count = 1; + dp_packet_batch_init_packet(batch, packet); } return retval; } diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 752f157..b5a35b7 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -1017,8 +1017,7 @@ netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) netdev->stats.rx_bytes += dp_packet_size(packet); ovs_mutex_unlock(&netdev->mutex); - batch->packets[0] = packet; - batch->count = 1; + dp_packet_batch_init_packet(batch, packet); return 0; } diff --git a/tests/test-conntrack.c b/tests/test-conntrack.c index 6a77db8..28a7dc0 100644 --- a/tests/test-conntrack.c +++ b/tests/test-conntrack.c @@ -175,7 +175,7 @@ pcap_batch_execute_conntrack(struct conntrack *ct, NULL, NULL, NULL, NULL); dp_packet_batch_init(&new_batch); } - new_batch.packets[new_batch.count++] = packet;; + dp_packet_batch_add(&new_batch, packet); } if (!dp_packet_batch_is_empty(&new_batch)) { -- 2.7.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev