From patchwork Mon Aug 7 15:50:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 798766 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xR28j1Mdsz9s7C for ; Tue, 8 Aug 2017 01:52:05 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id C06D6AB2; Mon, 7 Aug 2017 15:51:25 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 1ECCFAAB for ; Mon, 7 Aug 2017 15:51:24 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 52E141A6 for ; Mon, 7 Aug 2017 15:50:54 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20170807155051euoutp0154226208f74c02e8e5f37a835eacb987~YmyNMQTgC2197521975euoutp01b; Mon, 7 Aug 2017 15:50:51 +0000 (GMT) Received: from eusmges3.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170807155050eucas1p1e5339b22abfec1ad7ffac8379c19c817~YmyMWFQyJ1667016670eucas1p1B; Mon, 7 Aug 2017 15:50:50 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3.samsung.com (EUCPMTA) with SMTP id D8.9F.12867.A5C88895; Mon, 7 Aug 2017 16:50:50 +0100 (BST) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170807155049eucas1p2d23dc33e93c129965da378db45b619b8~YmyLHqL9X0506805068eucas1p24; Mon, 7 Aug 2017 15:50:49 +0000 (GMT) X-AuditID: cbfec7f2-f793b6d000003243-d1-59888c5a6e01 Received: from eusync4.samsung.com ( [203.254.199.214]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id FE.97.18832.95C88895; Mon, 7 Aug 2017 16:50:49 +0100 (BST) Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by eusync4.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OUB00FA1O0LOAA0@eusync4.samsung.com>; Mon, 07 Aug 2017 16:50:49 +0100 (BST) From: Ilya Maximets To: ovs-dev@openvswitch.org, Andy Zhou Date: Mon, 07 Aug 2017 18:50:43 +0300 Message-id: <1502121043-16895-1-git-send-email-i.maximets@samsung.com> X-Mailer: git-send-email 2.7.4 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKIsWRmVeSWpSXmKPExsWy7djPc7pRPR2RBneuSlvMe7+J0WLa59vs Flfaf7JbzP30nNGBxePZzf+MHs+v9bB49G1ZxRjAHMVlk5Kak1mWWqRvl8CVcarhClvBR9mK vVdmszcw7hPvYuTgkBAwkVi1Rq2LkRPIFJO4cG89WxcjF4eQwFJGiRVLWlghnM+MEjvX3mSF qDKRmH7qKVRiGaPE8SNbmSCcZiaJpzNvMoJUsQnoSJxafQTMFhEwk1i/bT1YN7NAsMSO9cfY QGxhAWeJ3vX3wWwWAVWJ5uP3WUBsXgE3iZbOSVDb5CRunutkBlkgIbCGTeL74hlsEHfLSmw6 wAxR4yJxvL+JDcIWlnh1fAs7hC0j0dlxkAmit5lRomHVJUYIZwKjxJfm5UwQVfYSp25eZYK4 jk9i0rbpzBALeCU62oQgSjwkvh95DbXAUWLptQlg5UICsRL3n55hn8AovYCRYRWjSGppcW56 arGxXnFibnFpXrpecn7uJkZg5J3+d/zTDsavJ6wOMQpwMCrx8DJkdkQKsSaWFVfmHmKU4GBW EuGVbwYK8aYkVlalFuXHF5XmpBYfYpTmYFES57WNaosUEkhPLEnNTk0tSC2CyTJxcEo1MMpy 9xeGbYouF9vEKTE/1FXv0attxTPOZ36+9Y/hU65ta77P4UXrjlQ47+F1EXvJLLfaof3aA9vQ X2sEXd9c2lLFyS21uvDbba1qUaMTAb0e4VeP8sQ1MgV17F+jUOE1JXCVbeipo7/WX3AW5ZSK 8WfeZvr1habCiTtlrnoc0ftDPtW9WB//W4mlOCPRUIu5qDgRAOulW/y4AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrBLMWRmVeSWpSXmKPExsVy+t/xa7qRPR2RBh1XOS3mvd/EaDHt8212 iyvtP9kt5n56zujA4vHs5n9Gj+fXelg8+rasYgxgjnKzyUhNTEktUkjNS85PycxLt1UKDXHT tVBSyEvMTbVVitD1DQlSUihLzCkF8owM0ICDc4B7sJK+XYJbxqmGK2wFH2Ur9l6Zzd7AuE+8 i5GTQ0LARGL6qaesELaYxIV769lAbCGBJYwS/Q9quhi5gOxWJoknH66wgCTYBHQkTq0+wghi iwiYSazfth6smVkgWOLgsV9gcWEBZ4ne9ffBBrEIqEo0H78P1ssr4CbR0jkJapmcxM1zncwT GLkXMDKsYhRJLS3OTc8tNtQrTswtLs1L10vOz93ECAy1bcd+bt7BeGlj8CFGAQ5GJR5ehsyO SCHWxLLiytxDjBIczEoivPLNQCHelMTKqtSi/Pii0pzU4kOMpkDLJzJLiSbnA+MgryTe0MTQ 3NLQyNjCwtzISEmcV/1yU6SQQHpiSWp2ampBahFMHxMHp1QDo6HCz+gFL37InI6rC+eLKdCp 9sra4bTvukuITNVVD72G8I+cd49y/JwyQTtz/4naY7l2xxcqcLnrB/yqNXUNe2ep79HR2PXt TwfPhifShyQXTA5leqW2MXpf1mXO55/+6uyZYzXx0ca/Ow6IpT364Gfv8tp2QU3RhDWiBiu0 VblMFpenauvLKLEUZyQaajEXFScCAMbBf7lLAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170807155049eucas1p2d23dc33e93c129965da378db45b619b8 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?SWx5YSBNYXhpbWV0cxtTUlItVmlydHVhbGl6YXRpb24gTGFi?= =?UTF-8?B?G+yCvOyEseyghOyekBtMZWFkaW5nIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?SWx5YSBNYXhpbWV0cxtTUlItVmlydHVhbGl6YXRpb24gTGFi?= =?UTF-8?B?G1NhbXN1bmcgRWxlY3Ryb25pY3MbTGVhZGluZyBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0NJU0hRG0MxMEdEMDFHRDAxMDE1NA==?= CMS-TYPE: 201P X-CMS-RootMailID: 20170807155049eucas1p2d23dc33e93c129965da378db45b619b8 X-RootMTR: 20170807155049eucas1p2d23dc33e93c129965da378db45b619b8 References: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Ilya Maximets , Heetae Ahn Subject: [ovs-dev] [PATCH] dp-packet: Introduce dp_packet_batch_add_unsafe(). X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org 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 --- 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)) {