From patchwork Mon Feb 6 12:38:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petri Savolainen X-Patchwork-Id: 93427 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1688902qgi; Mon, 6 Feb 2017 04:45:56 -0800 (PST) X-Received: by 10.107.136.195 with SMTP id s64mr6036107ioi.51.1486385156494; Mon, 06 Feb 2017 04:45:56 -0800 (PST) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id 98si9068623iol.61.2017.02.06.04.45.56; Mon, 06 Feb 2017 04:45:56 -0800 (PST) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id E33EB6087D; Mon, 6 Feb 2017 12:45:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 4EDD662F4A; Mon, 6 Feb 2017 12:39:28 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id 7C94362DBC; Mon, 6 Feb 2017 12:38:47 +0000 (UTC) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0129.outbound.protection.outlook.com [104.47.2.129]) by lists.linaro.org (Postfix) with ESMTPS id 371A762DB8 for ; Mon, 6 Feb 2017 12:38:29 +0000 (UTC) Received: from AM4PR0701CA0027.eurprd07.prod.outlook.com (10.165.102.37) by HE1PR07MB1627.eurprd07.prod.outlook.com (10.166.124.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.5; Mon, 6 Feb 2017 12:38:25 +0000 Received: from DB3FFO11FD020.protection.gbl (2a01:111:f400:7e04::180) by AM4PR0701CA0027.outlook.office365.com (2603:10a6:200:42::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.5 via Frontend Transport; Mon, 6 Feb 2017 12:38:25 +0000 Received-SPF: SoftFail (protection.outlook.com: domain of transitioning linaro.org discourages use of 131.228.2.35 as permitted sender) Received: from hybrid2.ext.net.nokia.com (131.228.2.35) by DB3FFO11FD020.mail.protection.outlook.com (10.47.217.51) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.7 via Frontend Transport; Mon, 6 Feb 2017 12:38:25 +0000 Received: from fihe3nok1346.nsn-intra.net (10.158.36.134) by fihe3nok1346.nsn-intra.net (10.158.36.134) with Microsoft SMTP Server (TLS) id 15.1.466.34; Mon, 6 Feb 2017 14:38:24 +0200 Received: from mailrelay.int.nokia.com (10.130.128.30) by fihe3nok1346.nsn-intra.net (10.158.36.134) with Microsoft SMTP Server (TLS) id 15.1.466.34 via Frontend Transport; Mon, 6 Feb 2017 14:38:24 +0200 Received: from fihe3nok0735.emea.nsn-net.net (localhost [127.0.0.1]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id v16Cc4f3019901 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 6 Feb 2017 14:38:04 +0200 Received: from 10.144.19.15 ([10.144.104.219]) by fihe3nok0735.emea.nsn-net.net (8.14.9/8.14.5) with ESMTP id v16Cc4VH019846 (version=TLSv1/SSLv3 cipher=AES128-SHA256 bits=128 verify=NOT) for ; Mon, 6 Feb 2017 14:38:04 +0200 X-HPESVCS-Source-Ip: 10.144.104.219 From: Petri Savolainen To: Date: Mon, 6 Feb 2017 14:38:03 +0200 Message-ID: <1486384684-14761-10-git-send-email-petri.savolainen@linaro.org> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1486384684-14761-1-git-send-email-petri.savolainen@linaro.org> References: <1486384684-14761-1-git-send-email-petri.savolainen@linaro.org> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.228.2.35; IPV:NLI; CTRY:FI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(7916002)(39840400002)(39450400003)(39410400002)(39850400002)(39860400002)(2980300002)(199003)(189002)(22756006)(626004)(356003)(2351001)(47776003)(2906002)(5660300001)(92566002)(305945005)(107886002)(68736007)(189998001)(50986999)(76176999)(5003940100001)(575784001)(86362001)(450100001)(106466001)(33646002)(53936002)(97736004)(105596002)(81156014)(8676002)(81166006)(48376002)(50466002)(8936002)(50226002)(38730400001)(77096006)(6916009)(2950100002)(110136003)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR07MB1627; H:hybrid2.ext.net.nokia.com; FPR:; SPF:SoftFail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB3FFO11FD020; 1:xCQnYiQ6ZIwB0u/UOgoj31lzabnyB9rGzoc44Ic1Nj5BQcGaAYeeXuAshWRzCY3fgarapdrvD4YujBuMmhNZc9PU5qrZpQDkLGHAXdIzVBOi2g4ZJPq4uaM2N87xtnT6jtwRxvx/1KA+hF3KrXSF9nmiffkGzsmabsAY0625h1OfqXCLVqxOmPY5LNuLL5NVEijTlkGESVNsn0+47klZXWHfCXnazE93BGJs7Q7PyPbF4kTn+ODw3hpAdO9N8YomChIX9WHfefeOAGlkEN9XoGdDEbYkm7v9k3I9JC169fn/ZCY6YFh0YNkiiLHroilvRfCf7zvMKCClcEpK92lHJN/cKuic0chBf8f1jkkteYbYt7eCsk0jki0da06yIvt+Z1wIIXhdeGrvzWs3YovDTxcXf+IcCAfNJLXc/LYQ5jDls+qi0FlTOa/vZzkKJNGLAu5bGtbCeIQXQe/XW7bA80dJ88EvckW9XPW8GzlngGk= X-MS-Office365-Filtering-Correlation-Id: 047a2bd7-21ed-4581-50d1-08d44e8d0b71 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:HE1PR07MB1627; X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB1627; 3:VcfVBYkcTbjrSKh6cOMWB5NNovc4J04f0Lu3q7g25Hlz8Sr2jNc1AdAQyf6Lrx7pQotgEZZNAZfAWCSZd8O7QaT2nE5d5ie77EsqyGZ2KO6QB39RKcmcDLg6H8vJElvJFOHzSttDJhYFDuAZE5oLBG16KwzBOyEtOoLfGzJbahIWH3kEoZ9oyKlJx8cDPOaEr+W5+x1DyIgk2t4rum+gWQEQ3iBoiLvHSl9YWXeemNcems0EdmzS875jczHiO+AM4jZKBVPQNMJAGDJUmJ9naI67GM5+tGdCIe66g7tWNhoaH0N6azXzytK5w60ihug5sXyIFNC5oJCz1XRbrP7XvqyOnRr7385s4sEQa6PW7tATLDQJy51uQD54QkvLiyZd; 25:JejN9oyHwzRKOnYn4jQoC55j7YwynByEYsBKyQ3qTB/YpVreZA2xMpJ98TkJIgxpp463eIoaEDRIS8979To+RiN0S9eJ4M1ky9Wzrxuue3mnG5j/waYmRkrNYYwSPbOrfCYY3YWp+QrsamoQsn9v9yPfzizvkbOUghym0DACnmuFLvJpmRG1+tnnGIMU2RRbDgz/zrLEdOHj2gVbCXsOJkHOudGD7bpdIytFBa7JcpF/c9rujQO2ZcgmEGW40NoOou4nZNEAjGyN7t+SG7tcP4csoCnHVi8HWjgzmxX29XK4fMxeoy6FjU5kuNoT+JfGNd/jec58OV6jUvTye9Zkvhyl5Mz1Vn2txIX/MXWyarQmWaCVr2ciGduElyOMkcTLCtberuYnp8tWBzvyIJ8r1JnB13zq0+GWV8MlqSVh7FdaqB85/p1zF28B7hSz3/+fTNKs/iBYLxnhv23XQUr7LQ== X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB1627; 31:nkAD4nWIh/31fwWEoZ2EngQhtofdbWSLwYq3trXOKj+rRc7EGBKrxEHIs8TQ53lkBtUb+SUiHYgnf1LdvKj11dX2JV/5Dh55XYybeL8RlNJFCMhMOIhJmUz41INDUbkg57z5VOUWyhZo7LqHzNNSCo4mRxjOyIuxJSCibBZffiBK+VILCkHwOTJ0D/V5wF1/RMtbIhiKN8Inz52A31+maEyriLQr6lVC531vDWpdGu7Xr85wtZezqlGyPochXOmcnRrbsZ5mhk0cM5d4IUsc5w1m0apv+y3ylaqwh2jBwrE=; 20:1GOvybF7CoJZdPT7zwKXoMoZKNJYlME7Xt8J/jj+akJXoLs09dy5xuHDcp34aDQJyvHjDWMk4GY01pTxI4PSVeeqevg9F3G70k5kHgxtdrKEPv0DJaieqPTMP/o7DrqR4AXkkEForvqapJVofLG/A8bN9ckSjtSp81nO0gZCCum6POtyJdsjTs8VE0gSGenXhh54i34jR3MVMk0tsyI81iXLnpKZzaxOrwfsOxLQqKTm4CYW9qLvIdEMM6YPHi0G4e7G/roaUcuTa3Ed75jEb+TRz857TMq7cp2t7jby70mr3v4i8VtDaP0T3miiUVR8yagtIuET9K/d/YrbVnHrZAmWSwBmXSS1TSy+/4OTAiiB3AlMYdZ4y3BLdJoFKo/jJM7F+qA2DazyEDOi4j+g5gxrFukJpv+GLhZwv6V1BfFeua6NNG17W4bv/5dp1D2PwWnokFjQFMKqETdgCO5js9O/gGdbNKmW5H6ZLnNwkK0AwqLVIvvOWgr7zZ+fey41XvfZdHdsW3GnHfeDF/UKMKFdy1uHLUVyBptmflm9EPwke0X9aqT0oyP4kCWEgO/iuj/WVZ5Kvftpv2Ne0VjqhCo5jPx6P/BHPrPVAT+R9Ws= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13018025)(20170203043)(13016025)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123555025)(20161123564025)(20161123560025)(20161123562025)(6072148); SRVR:HE1PR07MB1627; BCL:0; PCL:0; RULEID:; SRVR:HE1PR07MB1627; X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB1627; 4:2qUwfJUVlSuPszmnzqqCYcapyCHXYu8SwrgzPFXScvq5F4f6ABX4Uh4lbJUhhgL7wIgWxuwzDg6xmBYQSjGvCtlzSGxQIHLBVc7hak9pOsKdymNcOSFl3YlfWB+eA9eYX5ONMyNFqwH6MP1Pndix78pBVAzaMyEMMSnvZXt/i6Pez/qCXz3wz6eiNX9NbYwmtdgNaKVHQjxE/UTY06XQ1zZDujDUquoqPobF2uDYJVIwBQyYuf3VTsQOf4KB3/vXDXjPODMrLYUtdtUhFSJJ9MHhtiFNEkkG16xrOlzw5hR3Ajb8QEUPFV84g8PrGLCKozAtL9aZi5vO0wTkPE/FUY8jwt1tmLiQhEpFWi6YRMLmebJg9cY7VGEwsbUtnWn0x2/tOhD+Yjo2EeEPoyGNaSRZd/W4DOmmyWWo24Hl2A0GV639QBDjWQh7uYtPn0BFP36xQYLgo43D60KDogclCWtVw70w91hZvfWXZPBvps68N79FM4sfEdUPHYvWlU8Kb1VKhL4O5aoHWUxtfM7ddMmH/IfqB3VfDldqdCTh4nIRa1eUgBQTW5ambxDgDRCMxe5lgDI+XZXxCBt9X/dahH7cu2tkHxQ+96ScRM2+Xunaeow3SfSlZSzNDObFlVtDStpqgWDcOKnSqcOgg3+ntgBCPVzWi5znIh3BJUpEfRY3d8kyoFDkcafCAayky/+MZfoHCt/MkntfVSugN1+X+3pzKI8CBD+S7pbgxfcvzx4= X-Forefront-PRVS: 0210479ED8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR07MB1627; 23:6U9ixVKqR78iA6pcPopgLBeVPb0KZLsuHf95JViTm?= LRissQrSTU+FLR/Ss6xF9RKqBCvps9aA/3XQPhvOff2GC6GQ3X+w8rA1/Bn92ACobMi4zJppszbOYAqMAH6cVLyrcaZNsBJySKMl9twgGhEk4wGQ30ApWcw13E0zBx954QQgZeDCYwAkU9R8wYLXXO8+bT+ifbYKX4U+xRmcfORfxMr7E34j699jgBMZYUwOd5g4JW6sFl3vLigjM/U123vgLBiNiO6CNGJJ/zE4ekb1ePwJ1MpwL8OcA99myqRtSimcTncXQuPsCHuPCAXhxxqIJdc0kEopdDX0Bs4jJCY8+1dTMso9uKEbSNlifZyfYu7qzRZSEZolW+OSibrbYF007gX9/zQzoi5815hJzXzCgAWjh5p7lsbax4zJa8pewnWA2/4MU7c2LPkzdCF85A+yTpmirOMiVO5uGjgeFSULTfMMLAXAYpo8de+cBpCoaljJhe4djltVQka5vhB/SHR4wS6r8STslTrC/6H6JmAYGOw3Y5iRknsd/9f4XZYUqMEg5O2ZAkL0dUb2a+xKAyB9DYd6faG128SX9oGfuCxUv/RWzFZCqkCBYbki3SYJpcpjPppFRKKHJ4xWdH6qGlxv3dhU9EoSFddX17JH6GYTl3fyiyfGJ59BxQuChAJn4ECt9a3U3swJ0i15uP6QWlEae1RCmGwzHdhyBhH0VM9p7QYlk0BtUUZHpdv688V6UUdVATefKAvxjZCUeJy4VNTMXcmfcwbgXMScYqLneB6h8QTqTtu8b5dZ0IXubwJpW2Fs3M6AJGnCQJPh9DRhM1SdCcJoN2R6wo1/TurwdisG3cSOguhFmB4gOfVR4P3rImEbYV0IZecfh0EIfueTY1tFrCfGL6TIDEi4fIWGkmWkvUFo+qotu0qPvAnTgPKAsArnzNQXHFEqRO+UAvwkVpxTaLwf04o6oRXpuaH1z/Cc7DjbTuXOIrABwvRP70aUh4upAcP/rPpVPrBdhcsHqJAm82c1lby45ZRUvdpLLJ4Rx22JUX96yoF6gRRWP/uye4cnfPOFY1kYgTVe5iJzwdkYEkSIHgvt7TqemQ8Y844SSYNXzGG4EgkUYzZZ4+vFkaaA4TkDnOa2/Y2tPafKeDa X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB1627; 6:a7W5PZ/mVGgMM+lpxZzbIZVXHjsWCCyt8R1Pby7jpovc/kUZnpnM96dXC3i2c0P/DMAqqwWUXfirCdBE6KAL6f9L58CbeROzYBLF5tJ04gB5ovTkaCSZ4/gc/GG5XyNZFHhVBMwkKPpzpaWJjErj6V9iu1qp3t/UQm6gH2bQKO+9aCvTxFNh+D1tCPLkWOz5GYSXQgm8BkC7R/jwN7HsMJ/keSpqEslqRTy39FhSBBUq3lZd+P4tgtQ5HLFb5RYZJYHhVTDmGl3OzpZv/e+Xz9Ea0KpozRmxPqdBhgiITsefJ5yzZm4tpuIsWXOMUOvFaUnibfrc3KprBcy1+XL7ZfA3q2s+uXxdwfBvwZ1qh2r7RyhDQCT2WdxjWMyajFn7QO6vqOLv9ux2y6pDmNkAyVL8RqUQUKTJMTkA42l+jBQ=; 5:1R5neB3ZVs5U1TCK8tYkOauhGvRwMCXNFOQvqNRdw8ee0InWNVWNo1al9fus9SCa6N9nAWUTxYFyTY+Vm0OMiNYi8Mkdp+bOOZMYyXhfsOhwEPo9Ya4NoHxLofrkgApJq/ohomlP4WkUeEQlDs8aoQ==; 24:tpPjZ9PDUPHQayhigdDIuTtxJtjfWD15ICLSPgzYFRxEC5wLEl1SZmfzG+HV7ZERpxZPTHCifYmul3tGHSo5c1IvzlvhKpt3OahedrJK0XM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB1627; 7:UHRFkcYUv+XOaBvWDvNAOleFl91kMWt9wcbAJVF6Wv3v6HGXEbroabIoCDKzsb6CGzMtYZKw6dHhYdPJtTAROLty8oy0liqPMKrDuZZ97dpodxtchNKOlsVMwgIsn1/DuLtQ0hjAEbekS04kR9jEOmXo3+0+GohcZvt8BqfPLolf0OK9IJIetf1WBlwLpEZDU/fFlWktBkrx1jHBH2ZDCFv1kCccSTkw5cB+JHVCKGfYw+mG9w14791ggDL2FUColFBF3HSHeyqwanGPycxyUJN2sMeDkm8rDCPlXf3JFQP60WYdcLOBP9bt9zzWWMLCfrDugzhrZxHgRvYFKxaO1sPIq46nbvB4x34jRBJ4AcFQ5Nd5xvGFp9rHB/Cw/FW/dAAD0U3W8cu+G3vSr6j3uPSMrPUDhuck4l9S0Br0lfY+jL/sCxe5LMldNF5Q939HbdtJi6Vl+qLwCsDFNrrPj14ZLmKMG1l/ThPTXwKtUIvuO3l0hYmYEp20C+2GyrY9ye+PE7Fs0RTRqn0hoNWRZQ== X-OriginatorOrg: nokia.onmicrosoft.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2017 12:38:25.4321 (UTC) X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5d471751-9675-428d-917b-70f44f9630b0; Ip=[131.228.2.35]; Helo=[hybrid2.ext.net.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR07MB1627 Subject: [lng-odp] [PATCH 09/10] linux-gen: packet: inline functions X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" Added first inlined packet functions. Functions are allways used inlined within the implementation. Applications see inlined versions only when ABI compatibility is disabled. Signed-off-by: Petri Savolainen --- platform/linux-generic/Makefile.am | 2 + platform/linux-generic/include/odp/api/packet.h | 11 +- .../include/odp/api/plat/packet_inlines.h | 173 +++++++++++++++++++++ .../include/odp/api/plat/packet_inlines_api.h | 113 ++++++++++++++ .../include/odp/api/plat/packet_types.h | 33 ++++ platform/linux-generic/odp_packet.c | 147 ++++------------- platform/linux-generic/pktio/dpdk.c | 5 +- platform/linux-generic/pktio/netmap.c | 5 +- test/common_plat/performance/Makefile.am | 4 + 9 files changed, 363 insertions(+), 130 deletions(-) create mode 100644 platform/linux-generic/include/odp/api/plat/packet_inlines.h create mode 100644 platform/linux-generic/include/odp/api/plat/packet_inlines_api.h -- 2.8.1 diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 64b0287..812b22c 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -78,6 +78,8 @@ odpapiplatinclude_HEADERS = \ $(srcdir)/include/odp/api/plat/crypto_types.h \ $(srcdir)/include/odp/api/plat/event_types.h \ $(srcdir)/include/odp/api/plat/init_types.h \ + $(srcdir)/include/odp/api/plat/packet_inlines.h \ + $(srcdir)/include/odp/api/plat/packet_inlines_api.h \ $(srcdir)/include/odp/api/plat/packet_types.h \ $(srcdir)/include/odp/api/plat/packet_io_types.h \ $(srcdir)/include/odp/api/plat/pool_types.h \ diff --git a/platform/linux-generic/include/odp/api/packet.h b/platform/linux-generic/include/odp/api/packet.h index ebbeaf1..eff4080 100644 --- a/platform/linux-generic/include/odp/api/packet.h +++ b/platform/linux-generic/include/odp/api/packet.h @@ -24,13 +24,10 @@ extern "C" { #include #include -/** @ingroup odp_packet - * @{ - */ - -/** - * @} - */ +#include +#if ODP_ABI_COMPAT == 0 +#include +#endif #include diff --git a/platform/linux-generic/include/odp/api/plat/packet_inlines.h b/platform/linux-generic/include/odp/api/plat/packet_inlines.h new file mode 100644 index 0000000..eb36aa9 --- /dev/null +++ b/platform/linux-generic/include/odp/api/plat/packet_inlines.h @@ -0,0 +1,173 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * Packet inline functions + */ + +#ifndef _ODP_PLAT_PACKET_INLINES_H_ +#define _ODP_PLAT_PACKET_INLINES_H_ + +#include +#include +#include +#include + +/** @internal Inline function offsets */ +extern const _odp_packet_inline_offset_t _odp_packet_inline; + +/** @internal Inline function @param pkt @return */ +static inline void *_odp_packet_data(odp_packet_t pkt) +{ + return *(void **)(uintptr_t)((uint8_t *)pkt + _odp_packet_inline.data); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_seg_len(odp_packet_t pkt) +{ + return *(uint32_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.seg_len); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_len(odp_packet_t pkt) +{ + return *(uint32_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.frame_len); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_headroom(odp_packet_t pkt) +{ + return *(uint32_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.headroom); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_tailroom(odp_packet_t pkt) +{ + return *(uint32_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.tailroom); +} + +/** @internal Inline function @param pkt @return */ +static inline odp_pool_t _odp_packet_pool(odp_packet_t pkt) +{ + return *(odp_pool_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.pool); +} + +/** @internal Inline function @param pkt @return */ +static inline odp_pktio_t _odp_packet_input(odp_packet_t pkt) +{ + return *(odp_pktio_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.input); +} + +/** @internal Inline function @param pkt @return */ +static inline int _odp_packet_num_segs(odp_packet_t pkt) +{ + return *(uint8_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.segcount); +} + +/** @internal Inline function @param pkt @return */ +static inline void *_odp_packet_user_ptr(odp_packet_t pkt) +{ + return *(void **)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.user_ptr); +} + +/** @internal Inline function @param pkt @return */ +static inline void *_odp_packet_user_area(odp_packet_t pkt) +{ + return *(void **)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.user_area); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_user_area_size(odp_packet_t pkt) +{ + return *(uint32_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.user_area_size); +} + +/** @internal Inline function @param pkt @return */ +static inline uint32_t _odp_packet_flow_hash(odp_packet_t pkt) +{ + return *(uint32_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.flow_hash); +} + +/** @internal Inline function @param pkt @return */ +static inline odp_time_t _odp_packet_ts(odp_packet_t pkt) +{ + return *(odp_time_t *)(uintptr_t)((uint8_t *)pkt + + _odp_packet_inline.timestamp); +} + +/** @internal Inline function @param pkt @return */ +static inline void *_odp_packet_head(odp_packet_t pkt) +{ + return (uint8_t *)_odp_packet_data(pkt) - _odp_packet_headroom(pkt); +} + +/** @internal Inline function @param pkt @return */ +static inline int _odp_packet_is_segmented(odp_packet_t pkt) +{ + return _odp_packet_num_segs(pkt) > 1; +} + +/** @internal Inline function @param pkt @return */ +static inline odp_packet_seg_t _odp_packet_first_seg(odp_packet_t pkt) +{ + (void)pkt; + + return 0; +} + +/** @internal Inline function @param pkt @return */ +static inline odp_packet_seg_t _odp_packet_last_seg(odp_packet_t pkt) +{ + return _odp_packet_num_segs(pkt) - 1; +} + +/** @internal Inline function @param pkt @param seg @return */ +static inline odp_packet_seg_t _odp_packet_next_seg(odp_packet_t pkt, + odp_packet_seg_t seg) +{ + if (odp_unlikely(seg >= _odp_packet_last_seg(pkt))) + return ODP_PACKET_SEG_INVALID; + + return seg + 1; +} + +/** @internal Inline function @param pkt @param offset @param len */ +static inline void _odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, + uint32_t len) +{ + (void)pkt; (void)offset; (void)len; +} + +/* Include inlined versions of API functions */ +#include +#if ODP_ABI_COMPAT == 0 + +/** @ingroup odp_packet + * @{ + */ + +#include + +/** + * @} + */ + +#endif + +#endif diff --git a/platform/linux-generic/include/odp/api/plat/packet_inlines_api.h b/platform/linux-generic/include/odp/api/plat/packet_inlines_api.h new file mode 100644 index 0000000..233bc87 --- /dev/null +++ b/platform/linux-generic/include/odp/api/plat/packet_inlines_api.h @@ -0,0 +1,113 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * Packet inline functions + */ + +#ifndef _ODP_PLAT_PACKET_INLINES_API_H_ +#define _ODP_PLAT_PACKET_INLINES_API_H_ + +_ODP_INLINE void *odp_packet_data(odp_packet_t pkt) +{ + return _odp_packet_data(pkt); +} + +_ODP_INLINE uint32_t odp_packet_seg_len(odp_packet_t pkt) +{ + return _odp_packet_seg_len(pkt); +} + +_ODP_INLINE uint32_t odp_packet_len(odp_packet_t pkt) +{ + return _odp_packet_len(pkt); +} + +_ODP_INLINE uint32_t odp_packet_headroom(odp_packet_t pkt) +{ + return _odp_packet_headroom(pkt); +} + +_ODP_INLINE uint32_t odp_packet_tailroom(odp_packet_t pkt) +{ + return _odp_packet_tailroom(pkt); +} + +_ODP_INLINE odp_pool_t odp_packet_pool(odp_packet_t pkt) +{ + return _odp_packet_pool(pkt); +} + +_ODP_INLINE odp_pktio_t odp_packet_input(odp_packet_t pkt) +{ + return _odp_packet_input(pkt); +} + +_ODP_INLINE int odp_packet_num_segs(odp_packet_t pkt) +{ + return _odp_packet_num_segs(pkt); +} + +_ODP_INLINE void *odp_packet_user_ptr(odp_packet_t pkt) +{ + return _odp_packet_user_ptr(pkt); +} + +_ODP_INLINE void *odp_packet_user_area(odp_packet_t pkt) +{ + return _odp_packet_user_area(pkt); +} + +_ODP_INLINE uint32_t odp_packet_user_area_size(odp_packet_t pkt) +{ + return _odp_packet_user_area_size(pkt); +} + +_ODP_INLINE uint32_t odp_packet_flow_hash(odp_packet_t pkt) +{ + return _odp_packet_flow_hash(pkt); +} + +_ODP_INLINE odp_time_t odp_packet_ts(odp_packet_t pkt) +{ + return _odp_packet_ts(pkt); +} + +_ODP_INLINE void *odp_packet_head(odp_packet_t pkt) +{ + return _odp_packet_head(pkt); +} + +_ODP_INLINE int odp_packet_is_segmented(odp_packet_t pkt) +{ + return _odp_packet_is_segmented(pkt); +} + +_ODP_INLINE odp_packet_seg_t odp_packet_first_seg(odp_packet_t pkt) +{ + return _odp_packet_first_seg(pkt); +} + +_ODP_INLINE odp_packet_seg_t odp_packet_last_seg(odp_packet_t pkt) +{ + return _odp_packet_last_seg(pkt); +} + +_ODP_INLINE odp_packet_seg_t odp_packet_next_seg(odp_packet_t pkt, + odp_packet_seg_t seg) +{ + return _odp_packet_next_seg(pkt, seg); +} + +_ODP_INLINE void odp_packet_prefetch(odp_packet_t pkt, uint32_t offset, + uint32_t len) +{ + return _odp_packet_prefetch(pkt, offset, len); +} + +#endif diff --git a/platform/linux-generic/include/odp/api/plat/packet_types.h b/platform/linux-generic/include/odp/api/plat/packet_types.h index 999130e..a8530bf 100644 --- a/platform/linux-generic/include/odp/api/plat/packet_types.h +++ b/platform/linux-generic/include/odp/api/plat/packet_types.h @@ -18,6 +18,8 @@ extern "C" { #endif +#include + #include #if ODP_ABI_COMPAT == 1 #include @@ -55,6 +57,37 @@ typedef enum { #endif +/** @internal Packet header field offsets for inline functions */ +typedef struct _odp_packet_inline_offset_t { + /** @internal field offset */ + size_t data; + /** @internal field offset */ + size_t seg_len; + /** @internal field offset */ + size_t frame_len; + /** @internal field offset */ + size_t headroom; + /** @internal field offset */ + size_t tailroom; + /** @internal field offset */ + size_t pool; + /** @internal field offset */ + size_t input; + /** @internal field offset */ + size_t segcount; + /** @internal field offset */ + size_t user_ptr; + /** @internal field offset */ + size_t user_area; + /** @internal field offset */ + size_t user_area_size; + /** @internal field offset */ + size_t flow_hash; + /** @internal field offset */ + size_t timestamp; + +} _odp_packet_inline_offset_t; + #ifdef __cplusplus } #endif diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index e56d954..b316ade 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-3-Clause */ +#include #include #include #include @@ -23,6 +24,23 @@ /* Initial packet segment data length */ #define BASE_LEN CONFIG_PACKET_MAX_SEG_LEN +/* Fill in packet header field offsets for inline functions */ +const _odp_packet_inline_offset_t _odp_packet_inline ODP_ALIGNED_CACHE = { + .data = offsetof(odp_packet_hdr_t, buf_hdr.seg[0].data), + .seg_len = offsetof(odp_packet_hdr_t, buf_hdr.seg[0].len), + .frame_len = offsetof(odp_packet_hdr_t, frame_len), + .headroom = offsetof(odp_packet_hdr_t, headroom), + .tailroom = offsetof(odp_packet_hdr_t, tailroom), + .pool = offsetof(odp_packet_hdr_t, buf_hdr.pool_hdl), + .input = offsetof(odp_packet_hdr_t, input), + .segcount = offsetof(odp_packet_hdr_t, buf_hdr.segcount), + .user_ptr = offsetof(odp_packet_hdr_t, buf_hdr.buf_ctx), + .user_area = offsetof(odp_packet_hdr_t, buf_hdr.uarea_addr), + .user_area_size = offsetof(odp_packet_hdr_t, buf_hdr.uarea_size), + .flow_hash = offsetof(odp_packet_hdr_t, flow_hash), + .timestamp = offsetof(odp_packet_hdr_t, timestamp) +}; + static inline odp_packet_hdr_t *packet_hdr(odp_packet_t pkt) { return (odp_packet_hdr_t *)(uintptr_t)pkt; @@ -655,13 +673,6 @@ odp_event_t odp_packet_to_event(odp_packet_t pkt) * */ -void *odp_packet_head(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return pkt_hdr->buf_hdr.seg[0].data - pkt_hdr->headroom; -} - uint32_t odp_packet_buf_len(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); @@ -669,35 +680,6 @@ uint32_t odp_packet_buf_len(odp_packet_t pkt) return pkt_hdr->buf_hdr.size * pkt_hdr->buf_hdr.segcount; } -void *odp_packet_data(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return packet_data(pkt_hdr); -} - -uint32_t odp_packet_seg_len(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return packet_first_seg_len(pkt_hdr); -} - -uint32_t odp_packet_len(odp_packet_t pkt) -{ - return packet_hdr(pkt)->frame_len; -} - -uint32_t odp_packet_headroom(odp_packet_t pkt) -{ - return packet_hdr(pkt)->headroom; -} - -uint32_t odp_packet_tailroom(odp_packet_t pkt) -{ - return packet_hdr(pkt)->tailroom; -} - void *odp_packet_tail(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); @@ -1207,13 +1189,6 @@ void *odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len, return addr; } -/* This function is a no-op */ -void odp_packet_prefetch(odp_packet_t pkt ODP_UNUSED, - uint32_t offset ODP_UNUSED, - uint32_t len ODP_UNUSED) -{ -} - /* * * Meta-data @@ -1221,41 +1196,16 @@ void odp_packet_prefetch(odp_packet_t pkt ODP_UNUSED, * */ -odp_pool_t odp_packet_pool(odp_packet_t pkt) -{ - return packet_hdr(pkt)->buf_hdr.pool_hdl; -} - -odp_pktio_t odp_packet_input(odp_packet_t pkt) -{ - return packet_hdr(pkt)->input; -} - int odp_packet_input_index(odp_packet_t pkt) { return odp_pktio_index(packet_hdr(pkt)->input); } -void *odp_packet_user_ptr(odp_packet_t pkt) -{ - return packet_hdr(pkt)->buf_hdr.buf_ctx; -} - void odp_packet_user_ptr_set(odp_packet_t pkt, const void *ctx) { packet_hdr(pkt)->buf_hdr.buf_cctx = ctx; } -void *odp_packet_user_area(odp_packet_t pkt) -{ - return packet_hdr(pkt)->buf_hdr.uarea_addr; -} - -uint32_t odp_packet_user_area_size(odp_packet_t pkt) -{ - return packet_hdr(pkt)->buf_hdr.uarea_size; -} - void *odp_packet_l2_ptr(odp_packet_t pkt, uint32_t *len) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); @@ -1348,13 +1298,6 @@ int odp_packet_l4_offset_set(odp_packet_t pkt, uint32_t offset) return 0; } -uint32_t odp_packet_flow_hash(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return pkt_hdr->flow_hash; -} - void odp_packet_flow_hash_set(odp_packet_t pkt, uint32_t flow_hash) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); @@ -1363,13 +1306,6 @@ void odp_packet_flow_hash_set(odp_packet_t pkt, uint32_t flow_hash) pkt_hdr->p.input_flags.flow_hash = 1; } -odp_time_t odp_packet_ts(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return pkt_hdr->timestamp; -} - void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp) { odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); @@ -1378,42 +1314,6 @@ void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp) pkt_hdr->p.input_flags.timestamp = 1; } -int odp_packet_is_segmented(odp_packet_t pkt) -{ - return packet_hdr(pkt)->buf_hdr.segcount > 1; -} - -int odp_packet_num_segs(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return pkt_hdr->buf_hdr.segcount; -} - -odp_packet_seg_t odp_packet_first_seg(odp_packet_t pkt) -{ - (void)pkt; - - return 0; -} - -odp_packet_seg_t odp_packet_last_seg(odp_packet_t pkt) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - return packet_last_seg(pkt_hdr); -} - -odp_packet_seg_t odp_packet_next_seg(odp_packet_t pkt, odp_packet_seg_t seg) -{ - odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt); - - if (odp_unlikely(seg >= (odp_packet_seg_t)packet_last_seg(pkt_hdr))) - return ODP_PACKET_SEG_INVALID; - - return seg + 1; -} - /* * * Segment level @@ -1542,7 +1442,7 @@ int odp_packet_align(odp_packet_t *pkt, uint32_t offset, uint32_t len, return rc; (void)odp_packet_move_data(*pkt, 0, shift, - odp_packet_len(*pkt) - shift); + _odp_packet_len(*pkt) - shift); (void)odp_packet_trunc_tail(pkt, shift, NULL, NULL); return 1; @@ -1586,7 +1486,7 @@ int odp_packet_concat(odp_packet_t *dst, odp_packet_t src) int odp_packet_split(odp_packet_t *pkt, uint32_t len, odp_packet_t *tail) { - uint32_t pktlen = odp_packet_len(*pkt); + uint32_t pktlen = _odp_packet_len(*pkt); if (len >= pktlen || tail == NULL) return -1; @@ -1627,7 +1527,7 @@ odp_packet_t odp_packet_copy(odp_packet_t pkt, odp_pool_t pool) odp_packet_t odp_packet_copy_part(odp_packet_t pkt, uint32_t offset, uint32_t len, odp_pool_t pool) { - uint32_t pktlen = odp_packet_len(pkt); + uint32_t pktlen = _odp_packet_len(pkt); odp_packet_t newpkt; if (offset >= pktlen || offset + len > pktlen) @@ -2246,3 +2146,8 @@ uint64_t odp_packet_seg_to_u64(odp_packet_seg_t hdl) { return _odp_pri(hdl); } + +/* Include non-inlined versions of API functions */ +#if ODP_ABI_COMPAT == 1 +#include +#endif diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index 0eb025a..3fe41a5 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -14,6 +14,9 @@ #include +#include +#include + #include #include #include @@ -836,7 +839,7 @@ static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry, return 0; } for (i = 0; i < num; i++) { - pkt_len = odp_packet_len(pkt_table[i]); + pkt_len = _odp_packet_len(pkt_table[i]); if (pkt_len > pkt_dpdk->mtu) { if (i == 0) diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c index 208984b..ae3db34 100644 --- a/platform/linux-generic/pktio/netmap.c +++ b/platform/linux-generic/pktio/netmap.c @@ -8,6 +8,9 @@ #include +#include +#include + #include #include #include @@ -806,7 +809,7 @@ static int netmap_send(pktio_entry_t *pktio_entry, int index, for (nb_tx = 0; nb_tx < num; nb_tx++) { pkt = pkt_table[nb_tx]; - pkt_len = odp_packet_len(pkt); + pkt_len = _odp_packet_len(pkt); if (pkt_len > pkt_nm->mtu) { if (nb_tx == 0) diff --git a/test/common_plat/performance/Makefile.am b/test/common_plat/performance/Makefile.am index 1074ade..9111c0c 100644 --- a/test/common_plat/performance/Makefile.am +++ b/test/common_plat/performance/Makefile.am @@ -28,6 +28,10 @@ odp_bench_packet_LDFLAGS = $(AM_LDFLAGS) -static odp_bench_packet_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test odp_crypto_LDFLAGS = $(AM_LDFLAGS) -static odp_crypto_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test +odp_pktio_perf_LDFLAGS = $(AM_LDFLAGS) -static +odp_pktio_perf_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test +odp_l2fwd_LDFLAGS = $(AM_LDFLAGS) -static +odp_l2fwd_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test odp_pktio_ordered_LDFLAGS = $(AM_LDFLAGS) -static odp_pktio_ordered_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/test odp_sched_latency_LDFLAGS = $(AM_LDFLAGS) -static