From patchwork Mon Nov 20 13:00:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Github ODP bot X-Patchwork-Id: 119278 Delivered-To: patch@linaro.org Received: by 10.80.225.132 with SMTP id k4csp3771599edl; Mon, 20 Nov 2017 05:00:32 -0800 (PST) X-Google-Smtp-Source: AGs4zMYT6yEuRQU7EjKgwKIUyw7TYTl4oj3y4+tFllNOEyanmP3yLZ/rAW6JrITNrTg2u0Uo63uR X-Received: by 10.55.8.137 with SMTP id 131mr18946957qki.310.1511182832079; Mon, 20 Nov 2017 05:00:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511182832; cv=none; d=google.com; s=arc-20160816; b=SyUSkka/0eM3xJN1Ta1cYFzWftTAJxo8N7JLDcuua/wGvbETyZgewWzNU5aMHSjeQ+ Y0lrXtmN0BGeJ5F+Ol4ptH+ZqqiV63hl9hKAVZq+YiXJESDb4L/s0eAZmKu1rjs7AjU5 7RVMW2R/2fxFgF618nAhkEEBAiZevUfluvx2OyruguNwyIGjfWPzpYiM9f07xzAewTrl bjz7FejrEAeFJLTm8zCttTps0LWDZRMMbypQ/adqpeBu3Spjs4tMPH4BhoZjKmZaDwI4 RaOnht99rxDmsAkaMI/KsNNvt9BqeSx6DuB7vzHyEfWLCWQ2ItLmbVtT7hgmVAGQu+gM 2Z9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:github-pr-num :references:in-reply-to:message-id:date:to:from:delivered-to :arc-authentication-results; bh=5hxFBq3PxuF9PMsDtukG9PK2f14XsiGkNFXyvwk8yIA=; b=ZeMvoRdz1RDqzMa9xf1faMbNJjB2gpa0mKtiOwJDrcXlTxKJMyPYfDGW8vnfaYY+VZ LMmnG1V5GHRBmTz8qjNOAN2lqYwdbCKrCxaLVMgJOXRFS/5WuCgBebfO2/lKKkrwSYOG yW8SUnwwl6B0TZ4f2/GNoGvQK0Pi+0ok+tbYepPxMhwyqBBrKhume9lGMwPR1xZK0qMk NhNYioL+9sUbZiOv+qBDEPhQhH66/JNOPpl2V4BGQS3sEGA9mshY3My9YVVjtdno5jZW rAhY0wPLT0gkZacXTG79/w/WsZg43A2b6EPWjQhXL5lE6RLhcwNwnvkJNjC8PHNdR1y4 XxkA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Return-Path: Received: from lists.linaro.org (ec2-54-197-127-237.compute-1.amazonaws.com. [54.197.127.237]) by mx.google.com with ESMTP id h52si119190qte.369.2017.11.20.05.00.30; Mon, 20 Nov 2017 05:00:32 -0800 (PST) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) client-ip=54.197.127.237; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Received: by lists.linaro.org (Postfix, from userid 109) id ADCCB60843; Mon, 20 Nov 2017 13:00:30 +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=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,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 54EA460604; Mon, 20 Nov 2017 13:00:25 +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 92760607A0; Mon, 20 Nov 2017 13:00:16 +0000 (UTC) Received: from forward104j.mail.yandex.net (forward104j.mail.yandex.net [5.45.198.247]) by lists.linaro.org (Postfix) with ESMTPS id BF2296068D for ; Mon, 20 Nov 2017 13:00:12 +0000 (UTC) Received: from mxback4o.mail.yandex.net (mxback4o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::1e]) by forward104j.mail.yandex.net (Yandex) with ESMTP id 0EFF8421A4 for ; Mon, 20 Nov 2017 16:00:11 +0300 (MSK) Received: from smtp4o.mail.yandex.net (smtp4o.mail.yandex.net [2a02:6b8:0:1a2d::28]) by mxback4o.mail.yandex.net (nwsmtp/Yandex) with ESMTP id 9LefZVKMcA-0AbOoDRx; Mon, 20 Nov 2017 16:00:11 +0300 Received: by smtp4o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id l67znhGFCa-0ABiUBw1; Mon, 20 Nov 2017 16:00:10 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (Client certificate not present) From: Github ODP bot To: lng-odp@lists.linaro.org Date: Mon, 20 Nov 2017 16:00:07 +0300 Message-Id: <1511182808-32328-2-git-send-email-odpbot@yandex.ru> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1511182808-32328-1-git-send-email-odpbot@yandex.ru> References: <1511182808-32328-1-git-send-email-odpbot@yandex.ru> Github-pr-num: 297 Subject: [lng-odp] [PATCH 2.0 v3 1/2] linux-gen: pktio: add pktio operations data pool 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" From: Bogdan Pricope Pktio instances need a memory area where to store configuration or state information. The size and structure of this area depends on pktio type. This pool is meant to be used for allocation of such memory areas. Signed-off-by: Bogdan Pricope --- /** Email created from pull request 297 (bogdanPricope:2_0_ops_alloc_pr) ** https://github.com/Linaro/odp/pull/297 ** Patch: https://github.com/Linaro/odp/pull/297.patch ** Base sha: 6cd43041e55bd73a02ca202f835e590b3ad5c354 ** Merge commit sha: 7b05757dc100acc261053cf8e9cb253091ceaf91 **/ platform/linux-dpdk/Makefile.am | 3 ++ platform/linux-generic/Makefile.am | 3 ++ .../linux-generic/include/odp_packet_io_pool.h | 27 ++++++++++ .../include/odp_packet_io_pool_access.h | 58 ++++++++++++++++++++++ platform/linux-generic/odp_packet_io.c | 9 ++++ platform/linux-generic/odp_packet_io_pool.c | 55 ++++++++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 platform/linux-generic/include/odp_packet_io_pool.h create mode 100644 platform/linux-generic/include/odp_packet_io_pool_access.h create mode 100644 platform/linux-generic/odp_packet_io_pool.c diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am index f27d2b50c..ee6c36e21 100644 --- a/platform/linux-dpdk/Makefile.am +++ b/platform/linux-dpdk/Makefile.am @@ -206,6 +206,8 @@ noinst_HEADERS = \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_internal.h \ ${srcdir}/include/odp_errno_define.h \ ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ring_internal.h \ + ${top_srcdir}/platform/linux-generic/include/odp_packet_io_pool.h \ + ${top_srcdir}/platform/linux-generic/include/odp_packet_io_pool_access.h \ ${top_srcdir}/platform/linux-generic/include/odp_pkt_queue_internal.h \ ${srcdir}/include/odp_pool_internal.h \ ${top_srcdir}/platform/linux-generic/include/odp_pool_subsystem.h \ @@ -260,6 +262,7 @@ __LIB__libodp_dpdk_la_SOURCES = \ ../linux-generic/pktio/subsystem.c \ odp_packet_flags.c \ ../linux-generic/odp_packet_io.c \ + ../linux-generic/odp_packet_io_pool.c \ ../linux-generic/pktio/loopback.c \ ../linux-generic/odp_pkt_queue.c \ pool/dpdk.c \ diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 56ef03c6f..a4aaa7693 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -175,6 +175,8 @@ noinst_HEADERS = \ include/odp_name_table_internal.h \ include/odp_packet_internal.h \ include/odp_packet_io_internal.h \ + include/odp_packet_io_pool.h \ + include/odp_packet_io_pool_access.h \ include/odp_packet_io_ring_internal.h \ pktio/ethtool.h \ pktio/common.h \ @@ -244,6 +246,7 @@ __LIB__libodp_linux_la_SOURCES = \ odp_packet.c \ odp_packet_flags.c \ odp_packet_io.c \ + odp_packet_io_pool.c \ pktio/ethtool.c \ pktio/subsystem.c \ pktio/ipc.c \ diff --git a/platform/linux-generic/include/odp_packet_io_pool.h b/platform/linux-generic/include/odp_packet_io_pool.h new file mode 100644 index 000000000..59ad053b1 --- /dev/null +++ b/platform/linux-generic/include/odp_packet_io_pool.h @@ -0,0 +1,27 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP packet IO pool + */ + +#ifndef ODP_PACKET_IO_POOL_H_ +#define ODP_PACKET_IO_POOL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +int _odp_packet_io_pool_create(void); +int _odp_packet_io_pool_destroy(void); + +#ifdef __cplusplus +} +#endif + +#endif /* ODP_PACKET_IO_POOL_H_*/ diff --git a/platform/linux-generic/include/odp_packet_io_pool_access.h b/platform/linux-generic/include/odp_packet_io_pool_access.h new file mode 100644 index 000000000..cdd7dd968 --- /dev/null +++ b/platform/linux-generic/include/odp_packet_io_pool_access.h @@ -0,0 +1,58 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP packet IO pool + */ + +#ifndef ODP_PACKET_IO_POOL_ACCESS_H_ +#define ODP_PACKET_IO_POOL_ACCESS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/** + * Packet IO operations data pool name + */ +#define ODP_PKTIO_OPS_DATA_POOL_NAME "ODP_PKTIO_OPS_DATA" + +#define ODP_OPS_DATA_ALLOC(_size) \ +({ \ + odpdrv_shm_pool_t _pool; \ + void *_ops_data = NULL; \ + \ + _pool = odpdrv_shm_pool_lookup(ODP_PKTIO_OPS_DATA_POOL_NAME); \ + if (_pool != ODPDRV_SHM_POOL_INVALID) \ + _ops_data = odpdrv_shm_pool_alloc(_pool, \ + ROUNDUP_CACHE_LINE(_size)); \ + \ + _ops_data; \ +}) + +#define ODP_OPS_DATA_FREE(_ops_data) \ +({ \ + odpdrv_shm_pool_t _pool; \ + int _result = -1; \ + \ + _pool = odpdrv_shm_pool_lookup(ODP_PKTIO_OPS_DATA_POOL_NAME); \ + if (_pool != ODPDRV_SHM_POOL_INVALID) { \ + odpdrv_shm_pool_free(_pool, _ops_data); \ + _result = 0; \ + } \ + _result; \ +}) + +#ifdef __cplusplus +} +#endif + +#endif /* ODP_PACKET_IO_POOL_ACCESS_H_*/ diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index a1c708616..efeac0269 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -76,6 +77,10 @@ int odp_pktio_init_global(void) pktio_entry_ptr[i] = pktio_entry; } + if (_odp_packet_io_pool_create()) { + odp_shm_free(shm); + return -1; + } return odp_pktio_ops_init_global(true); } @@ -1122,6 +1127,10 @@ int odp_pktio_term_global(void) ret = odp_pktio_ops_term_global(false); + ret = _odp_packet_io_pool_destroy(); + if (ret) + ODP_ERR("unable to destroy pktio pool\n"); + ret = odp_shm_free(odp_shm_lookup("odp_pktio_entries")); if (ret != 0) ODP_ERR("shm free failed for odp_pktio_entries"); diff --git a/platform/linux-generic/odp_packet_io_pool.c b/platform/linux-generic/odp_packet_io_pool.c new file mode 100644 index 000000000..3e1860475 --- /dev/null +++ b/platform/linux-generic/odp_packet_io_pool.c @@ -0,0 +1,55 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "config.h" + +#include +#include +#include +#include +#include "odp_packet_io_pool.h" +#include "odp_packet_io_pool_access.h" +#include "odp_debug_internal.h" + +#define ODP_PKTIO_OPS_DATA_POOL_SIZE 160000 + +int _odp_packet_io_pool_create(void) +{ + odpdrv_shm_pool_t pktio_ops_pool; + odpdrv_shm_pool_param_t pktio_ops_param; + + odp_memset(&pktio_ops_param, 0, sizeof(pktio_ops_param)); + pktio_ops_param.pool_size = ODP_PKTIO_OPS_DATA_POOL_SIZE; + pktio_ops_param.min_alloc = 1; + pktio_ops_param.max_alloc = ODP_PKTIO_OPS_DATA_POOL_SIZE; + + pktio_ops_pool = odpdrv_shm_pool_create(ODP_PKTIO_OPS_DATA_POOL_NAME, + &pktio_ops_param); + if (pktio_ops_pool == ODPDRV_SHM_POOL_INVALID) { + ODP_ERR("error to pool_create pktio_ops pool\n"); + return -1; + } + + return 0; +} + +int _odp_packet_io_pool_destroy(void) +{ + odpdrv_shm_pool_t pktio_ops_pool; + + pktio_ops_pool = odpdrv_shm_pool_lookup(ODP_PKTIO_OPS_DATA_POOL_NAME); + if (pktio_ops_pool == ODPDRV_SHM_POOL_INVALID) { + ODP_ERR("error pool_lookup pktio_ops pool\n"); + return -1; + } + + if (odpdrv_shm_pool_destroy(pktio_ops_pool)) { + ODP_ERR("error pool_destroy pktio_ops pool\n"); + return -1; + } + + return 0; +} From patchwork Mon Nov 20 13:00:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Github ODP bot X-Patchwork-Id: 119279 Delivered-To: patch@linaro.org Received: by 10.80.225.132 with SMTP id k4csp3774654edl; Mon, 20 Nov 2017 05:02:41 -0800 (PST) X-Google-Smtp-Source: AGs4zMZJmqlt2ZxsM+rPmxCR/+Q7wIHfAS6a8K8IWdIH3IQKclGaxAUJOVofhAy1F1wlqE5vtP1z X-Received: by 10.55.195.216 with SMTP id r85mr19439294qkl.218.1511182961006; Mon, 20 Nov 2017 05:02:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511182960; cv=none; d=google.com; s=arc-20160816; b=RRVSvv/g7BNolOqmtMo+tVmiEnawUuc4AU6dobTNsNByGhx+WMp0mzC/A0tCa3fX8h jIAwaCOIQI1vGHJA3kM4PS08yKRWYYxYEnuEWc85GVIEhBpeivbsW+itm9y7stMeE6r9 kkRj05P7LQXqJu1jOM4ka/Q8aPhzkLRZ33gMVFJuPQI0f5AaNwUsu1C6ZzhBusaa0D6m MWptSt/CRM32kolSTzVEuEUNNR9a2IufZTH4YlYZ4p5oL8Z01iSXbM4O8kBsCzFU0B4I xVs8JWmBZywpWklDCIhVdnSM6JIKk7Ut6gRKrfgWGu7VJBLLwchpygxOsvGYEwoLLN3u ofkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:github-pr-num :references:in-reply-to:message-id:date:to:from:delivered-to :arc-authentication-results; bh=ZCcKKEgg9wor4aSrs2Odrp42N9jncIi5CUf9bGPpCBo=; b=vPpuLfjm2XfFcxWNpTL9ZPZym+ZdXSjCVZx+r+hDaJEqDMxNNUkBS57x7uWTEjGuM4 OdrQIdyXYaUOOuAACOsPPVxkiUmpvOjbIpO5ZxqDfy9uiWz2d9uCQ4cA13oCk31OgdhU erKg5iXGcYW6BZDwiqi8s2fJ1k6t2N4B41jU5tRMfeBv2Qdm8C0nyFjCJBohgte/NV0O NKKFKXilbwJXo04/QH2/LMwubKZ/jp43FeWiGRTwYA6Hk25MjQF9+K7Nh84Rlcdnvat7 PFG4d5ZFvAfpz9t4ZGTLm9SFshdvq59V7VsvK5Hsx0Gd609bdGBKEQAY806kZo7GNyOh LN0w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Return-Path: Received: from lists.linaro.org (ec2-54-197-127-237.compute-1.amazonaws.com. [54.197.127.237]) by mx.google.com with ESMTP id 41si4455798qtz.175.2017.11.20.05.02.40; Mon, 20 Nov 2017 05:02:40 -0800 (PST) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) client-ip=54.197.127.237; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Received: by lists.linaro.org (Postfix, from userid 109) id 8C95B608E7; Mon, 20 Nov 2017 13:02:40 +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=-5.4 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, 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 E9B1D6087F; Mon, 20 Nov 2017 13:00:45 +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 1EAA060604; Mon, 20 Nov 2017 13:00:22 +0000 (UTC) Received: from forward104p.mail.yandex.net (forward104p.mail.yandex.net [77.88.28.107]) by lists.linaro.org (Postfix) with ESMTPS id 600F560692 for ; Mon, 20 Nov 2017 13:00:14 +0000 (UTC) Received: from mxback4o.mail.yandex.net (mxback4o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::1e]) by forward104p.mail.yandex.net (Yandex) with ESMTP id C5D1D18115A for ; Mon, 20 Nov 2017 16:00:12 +0300 (MSK) Received: from smtp4o.mail.yandex.net (smtp4o.mail.yandex.net [2a02:6b8:0:1a2d::28]) by mxback4o.mail.yandex.net (nwsmtp/Yandex) with ESMTP id dRO4EVQ3rV-0CbOT5nv; Mon, 20 Nov 2017 16:00:12 +0300 Received: by smtp4o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id l67znhGFCa-0BBurihY; Mon, 20 Nov 2017 16:00:11 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (Client certificate not present) From: Github ODP bot To: lng-odp@lists.linaro.org Date: Mon, 20 Nov 2017 16:00:08 +0300 Message-Id: <1511182808-32328-3-git-send-email-odpbot@yandex.ru> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1511182808-32328-1-git-send-email-odpbot@yandex.ru> References: <1511182808-32328-1-git-send-email-odpbot@yandex.ru> Github-pr-num: 297 Subject: [lng-odp] [PATCH 2.0 v3 2/2] linux-gen: pktio: use pktio operations data pool 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" From: Bogdan Pricope Pktio instances need a memory area where to store configuration or state information. This patch replaces utilization of a fixed size memory area with a variable size memory area allocated from a predefined pool. This reduces the memory size needed to store pktio array. Signed-off-by: Bogdan Pricope --- /** Email created from pull request 297 (bogdanPricope:2_0_ops_alloc_pr) ** https://github.com/Linaro/odp/pull/297 ** Patch: https://github.com/Linaro/odp/pull/297.patch ** Base sha: 6cd43041e55bd73a02ca202f835e590b3ad5c354 ** Merge commit sha: 7b05757dc100acc261053cf8e9cb253091ceaf91 **/ platform/linux-dpdk/pktio/dpdk.c | 57 ++++++--------- .../linux-generic/include/odp_packet_io_internal.h | 4 +- .../include/odp_pktio_ops_subsystem.h | 8 +-- platform/linux-generic/pktio/dpdk.c | 75 ++++++++----------- platform/linux-generic/pktio/ipc.c | 41 +++++++---- platform/linux-generic/pktio/loopback.c | 40 +++++++---- platform/linux-generic/pktio/netmap.c | 83 ++++++++++------------ platform/linux-generic/pktio/pcap.c | 26 ++++--- platform/linux-generic/pktio/socket.c | 58 +++++++-------- platform/linux-generic/pktio/socket_mmap.c | 58 +++++++-------- platform/linux-generic/pktio/tap.c | 46 +++++++----- 11 files changed, 256 insertions(+), 240 deletions(-) diff --git a/platform/linux-dpdk/pktio/dpdk.c b/platform/linux-dpdk/pktio/dpdk.c index a6e2573e5..832ac7acf 100644 --- a/platform/linux-dpdk/pktio/dpdk.c +++ b/platform/linux-dpdk/pktio/dpdk.c @@ -99,8 +99,7 @@ static void _dpdk_print_port_mac(uint8_t portid) static int input_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry, const odp_pktin_queue_param_t *p) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_pktin_mode_t mode = pktio_entry->s.param.in_mode; /** @@ -129,8 +128,7 @@ static int input_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry, static int output_queues_config_pkt_dpdk(pktio_entry_t *pktio_entry, const odp_pktout_queue_param_t *p) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; if (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE) pkt_dpdk->lockless_tx = 1; @@ -147,8 +145,7 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, { uint8_t portid = 0; struct rte_eth_dev_info dev_info; - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = NULL; int i; if (!_dpdk_netdev_is_valid(netdev)) { @@ -157,10 +154,14 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, return -1; } - if (odp_unlikely(pkt_dpdk == NULL)) { + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_dpdk)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { ODP_ERR("Failed to allocate pktio_ops_dpdk_data_t struct"); return -1; } + pkt_dpdk = pktio_entry->s.ops_data; + + memset(pkt_dpdk, 0, sizeof(*pkt_dpdk)); portid = atoi(netdev); pkt_dpdk->portid = portid; @@ -168,6 +169,7 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, rte_eth_dev_info_get(portid, &dev_info); if (dev_info.driver_name == NULL) { ODP_DBG("No driver found for interface: %s\n", netdev); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } if (!strcmp(dev_info.driver_name, "rte_ixgbe_pmd")) @@ -191,20 +193,18 @@ static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED, static int close_pkt_dpdk(pktio_entry_t *pktio_entry) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; if (pktio_entry->s.state == PKTIO_STATE_STOPPED) rte_eth_dev_close(pkt_dpdk->portid); - return 0; + return ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); } static int start_pkt_dpdk(pktio_entry_t *pktio_entry) { int ret, i; - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint8_t portid = pkt_dpdk->portid; int sid = rte_eth_dev_socket_id(pkt_dpdk->portid); int socket_id = sid < 0 ? 0 : sid; @@ -312,8 +312,7 @@ static int start_pkt_dpdk(pktio_entry_t *pktio_entry) static int stop_pkt_dpdk(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; rte_eth_dev_stop(pkt_dpdk->portid); return 0; @@ -362,8 +361,7 @@ static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index, odp_packet_t pkt_table[], int len) { uint16_t nb_rx, i; - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_packet_t *saved_pkt_table; uint8_t min = pkt_dpdk->min_rx_burst; odp_time_t ts_val; @@ -479,8 +477,7 @@ static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index, const odp_packet_t pkt_table[], int len) { int pkts; - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; if (!pkt_dpdk->lockless_tx) odp_ticketlock_lock(&pkt_dpdk->tx_lock[index]); @@ -532,8 +529,7 @@ static uint32_t _dpdk_vdev_mtu(uint8_t port_id) static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint16_t mtu = 0; int ret; @@ -593,8 +589,7 @@ static int _dpdk_vdev_promisc_mode_set(uint8_t port_id, int enable) static int promisc_mode_set_pkt_dpdk(pktio_entry_t *pktio_entry, int enable) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint8_t portid = pkt_dpdk->portid; if (enable) @@ -637,8 +632,7 @@ static int _dpdk_vdev_promisc_mode(uint8_t port_id) static int promisc_mode_get_pkt_dpdk(pktio_entry_t *pktio_entry) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint8_t portid = pkt_dpdk->portid; if (pkt_dpdk->vdev_sysc_promisc) @@ -649,8 +643,7 @@ static int promisc_mode_get_pkt_dpdk(pktio_entry_t *pktio_entry) static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; rte_eth_macaddr_get(pkt_dpdk->portid, (struct ether_addr *)mac_addr); @@ -660,8 +653,7 @@ static int mac_get_pkt_dpdk(pktio_entry_t *pktio_entry, void *mac_addr) static int capability_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_capability_t *capa) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; *capa = pkt_dpdk->capa; return 0; @@ -669,8 +661,7 @@ static int capability_pkt_dpdk(pktio_entry_t *pktio_entry, static int link_status_pkt_dpdk(pktio_entry_t *pktio_entry) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; struct rte_eth_link link; rte_eth_link_get(pkt_dpdk->portid, &link); @@ -693,8 +684,7 @@ static void stats_convert(struct rte_eth_stats *rte_stats, static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; int ret; struct rte_eth_stats rte_stats; @@ -712,8 +702,7 @@ static int stats_pkt_dpdk(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) static int stats_reset_pkt_dpdk(pktio_entry_t *pktio_entry) { - const pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + const pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; rte_eth_stats_reset(pkt_dpdk->portid); return 0; diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index 7df11618e..6912b8519 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -43,8 +43,8 @@ typedef union pktio_entry_u pktio_entry_t; struct pktio_entry { const pktio_ops_module_t *ops; /**< Implementation specific methods */ - uint8_t ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE]; /**< IO operation - specific data */ + void *ops_data; /**< IO operation specific data */ + /* These two locks together lock the whole pktio device */ odp_ticketlock_t rxl; /**< RX ticketlock */ odp_ticketlock_t txl; /**< TX ticketlock */ diff --git a/platform/linux-generic/include/odp_pktio_ops_subsystem.h b/platform/linux-generic/include/odp_pktio_ops_subsystem.h index cb107fed2..f93011e9e 100644 --- a/platform/linux-generic/include/odp_pktio_ops_subsystem.h +++ b/platform/linux-generic/include/odp_pktio_ops_subsystem.h @@ -16,6 +16,7 @@ extern "C" { #include #include +#include /* ODP packet IO operations subsystem declaration */ ODP_SUBSYSTEM_DECLARE(pktio_ops); @@ -85,13 +86,6 @@ typedef ODP_MODULE_CLASS(pktio_ops) { odp_api_proto(pktio_ops, print) print; } pktio_ops_module_t; -/* Maximum size of pktio specific ops data.*/ -#define ODP_PKTIO_ODPS_DATA_MAX_SIZE 80000 - -/* Extract pktio ops data from pktio entry structure */ -#define odp_ops_data(_p, _mod) \ - ((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s.ops_data) - #ifdef __cplusplus } #endif diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index 4ef111c34..7d39bb1bc 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -382,7 +382,7 @@ static inline int mbuf_to_pkt(pktio_entry_t *pktio_entry, struct rte_mbuf *mbuf_table[], uint16_t mbuf_num, odp_time_t *ts) { - pktio_ops_dpdk_data_t *pkt_dpdk = odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_packet_t pkt; odp_packet_hdr_t *pkt_hdr; uint16_t pkt_len; @@ -564,8 +564,7 @@ static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry, struct rte_mbuf *mbuf_table[], const odp_packet_t pkt_table[], uint16_t num) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; int i, j; char *data; uint16_t pkt_len; @@ -609,8 +608,7 @@ static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry, struct rte_mbuf *mbuf_table[], uint16_t mbuf_num, odp_time_t *ts) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_packet_t pkt; odp_packet_hdr_t *pkt_hdr; uint16_t pkt_len; @@ -683,8 +681,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry, const odp_packet_t pkt_table[], uint16_t num, uint16_t *copy_count) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_pktout_config_opt_t *pktout_cfg = &pktio_entry->s.config.pktout; int i; *copy_count = 0; @@ -778,8 +775,7 @@ static uint32_t dpdk_vdev_mtu_get(uint8_t port_id) static uint32_t dpdk_mtu_get(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint32_t mtu = 0; if (rte_eth_dev_get_mtu(pkt_dpdk->port_id, (uint16_t *)&mtu)) @@ -872,8 +868,7 @@ static void rss_conf_to_hash_proto(struct rte_eth_rss_conf *rss_conf, static int dpdk_setup_port(pktio_entry_t *pktio_entry) { int ret; - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; struct rte_eth_rss_conf rss_conf; uint16_t hw_ip_checksum = 0; @@ -921,8 +916,7 @@ static int dpdk_setup_port(pktio_entry_t *pktio_entry) static int dpdk_close(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; unsigned idx; unsigned i, j; @@ -934,7 +928,7 @@ static int dpdk_close(pktio_entry_t *pktio_entry) rte_pktmbuf_free(pkt_dpdk->rx_cache[i].s.pkt[idx++]); } - return 0; + return ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); } static int dpdk_pktio_init(void) @@ -1088,8 +1082,7 @@ static int dpdk_pktio_term(void) static int dpdk_input_queues_config(pktio_entry_t *pktio_entry, const odp_pktin_queue_param_t *p) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_pktin_mode_t mode = pktio_entry->s.param.in_mode; odp_bool_t lockless; @@ -1113,8 +1106,7 @@ static int dpdk_input_queues_config(pktio_entry_t *pktio_entry, static int dpdk_output_queues_config(pktio_entry_t *pktio_entry, const odp_pktout_queue_param_t *p) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_bool_t lockless; if (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE) @@ -1130,8 +1122,7 @@ static int dpdk_output_queues_config(pktio_entry_t *pktio_entry, static void dpdk_init_capability(pktio_entry_t *pktio_entry, struct rte_eth_dev_info *dev_info) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; odp_pktio_capability_t *capa = &pkt_dpdk->capa; int ptype_cnt; int ptype_l3_ipv4 = 0; @@ -1208,8 +1199,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, const char *netdev, odp_pool_t pool) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = NULL; struct rte_eth_dev_info dev_info; struct rte_mempool *pkt_pool; char pool_name[RTE_MEMPOOL_NAMESIZE]; @@ -1223,6 +1213,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, if (pool == ODP_POOL_INVALID) return -1; + pool_entry = pool_entry_from_hdl(pool); if (!dpdk_netdev_is_valid(netdev)) { @@ -1237,10 +1228,12 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, dpdk_initialized = 1; } - if (odp_unlikely(pkt_dpdk == NULL)) { + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_dpdk)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { ODP_ERR("Failed to allocate pktio_ops_dpdk_data_t struct"); return -1; } + pkt_dpdk = pktio_entry->s.ops_data; /* Init pktio entry */ memset(pkt_dpdk, 0, sizeof(*pkt_dpdk)); @@ -1250,6 +1243,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, if (rte_eth_dev_count() == 0) { ODP_ERR("No DPDK ports found\n"); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } @@ -1258,6 +1252,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, mtu = dpdk_mtu_get(pktio_entry); if (mtu == 0) { ODP_ERR("Failed to read interface MTU\n"); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } pkt_dpdk->mtu = mtu + _ODP_ETHHDR_LEN; @@ -1294,6 +1289,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, } if (pkt_pool == NULL) { ODP_ERR("Cannot init mbuf packet pool\n"); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } @@ -1318,8 +1314,7 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED, static int dpdk_start(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint8_t port_id = pkt_dpdk->port_id; int ret; unsigned i; @@ -1370,8 +1365,7 @@ static int dpdk_start(pktio_entry_t *pktio_entry) static int dpdk_stop(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; rte_eth_dev_stop(pkt_dpdk->port_id); @@ -1381,8 +1375,7 @@ static int dpdk_stop(pktio_entry_t *pktio_entry) static int dpdk_recv(pktio_entry_t *pktio_entry, int index, odp_packet_t pkt_table[], int num) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; pkt_cache_t *rx_cache = &pkt_dpdk->rx_cache[index]; odp_time_t ts_val; odp_time_t *ts = NULL; @@ -1457,8 +1450,7 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index, const odp_packet_t pkt_table[], int num) { struct rte_mbuf *tx_mbufs[num]; - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint16_t copy_count = 0; int tx_pkts; int i; @@ -1521,8 +1513,7 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index, static int dpdk_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; rte_eth_macaddr_get(pkt_dpdk->port_id, (struct ether_addr *)mac_addr); @@ -1531,8 +1522,7 @@ static int dpdk_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) static int dpdk_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint8_t port_id = pkt_dpdk->port_id; if (pkt_dpdk->vdev_sysc_promisc) @@ -1548,8 +1538,7 @@ static int dpdk_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) static int dpdk_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; uint8_t port_id = pkt_dpdk->port_id; if (pkt_dpdk->vdev_sysc_promisc) @@ -1561,8 +1550,7 @@ static int dpdk_promisc_mode_get(pktio_entry_t *pktio_entry) static int dpdk_capability(pktio_entry_t *pktio_entry, odp_pktio_capability_t *capa) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; *capa = pkt_dpdk->capa; return 0; @@ -1570,8 +1558,7 @@ static int dpdk_capability(pktio_entry_t *pktio_entry, static int dpdk_link_status(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; struct rte_eth_link link; memset(&link, 0, sizeof(struct rte_eth_link)); @@ -1595,8 +1582,7 @@ static void stats_convert(const struct rte_eth_stats *rte_stats, static int dpdk_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; int ret; struct rte_eth_stats rte_stats; @@ -1611,8 +1597,7 @@ static int dpdk_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) static int dpdk_stats_reset(pktio_entry_t *pktio_entry) { - pktio_ops_dpdk_data_t *pkt_dpdk = - odp_ops_data(pktio_entry, dpdk); + pktio_ops_dpdk_data_t *pkt_dpdk = pktio_entry->s.ops_data; rte_eth_stats_reset(pkt_dpdk->port_id); return 0; diff --git a/platform/linux-generic/pktio/ipc.c b/platform/linux-generic/pktio/ipc.c index 5ab957403..9d928c72a 100644 --- a/platform/linux-generic/pktio/ipc.c +++ b/platform/linux-generic/pktio/ipc.c @@ -49,7 +49,7 @@ static const char *_ipc_odp_buffer_pool_shm_name(odp_pool_t pool_hdl) static int _ipc_master_start(pktio_entry_t *pktio_entry) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; struct pktio_info *pinfo = pkt_ipc->pinfo; odp_shm_t shm; @@ -78,7 +78,7 @@ static int _ipc_init_master(pktio_entry_t *pktio_entry, const char *dev, odp_pool_t pool_hdl) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; char ipc_shm_name[ODP_POOL_NAME_LEN + sizeof("_m_prod")]; pool_t *pool; struct pktio_info *pinfo; @@ -230,7 +230,7 @@ static int _ipc_init_slave(const char *dev, pktio_entry_t *pktio_entry, odp_pool_t pool) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; if (strlen(dev) > (ODP_POOL_NAME_LEN - sizeof("_slave_r"))) ODP_ABORT("too big ipc name\n"); @@ -241,7 +241,7 @@ static int _ipc_init_slave(const char *dev, static int _ipc_slave_start(pktio_entry_t *pktio_entry) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; char ipc_shm_name[ODP_POOL_NAME_LEN + sizeof("_slave_r")]; struct pktio_info *pinfo; odp_shm_t shm; @@ -343,7 +343,7 @@ static int ipc_pktio_open(odp_pktio_t id ODP_UNUSED, char name[ODP_POOL_NAME_LEN + sizeof("_info")]; char tail[ODP_POOL_NAME_LEN]; odp_shm_t shm; - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc; ODP_STATIC_ASSERT(ODP_POOL_NAME_LEN == _RING_NAMESIZE, "mismatch pool and ring name arrays"); @@ -351,6 +351,15 @@ static int ipc_pktio_open(odp_pktio_t id ODP_UNUSED, if (strncmp(dev, "ipc", 3)) return -1; + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_ipc)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_ipc_data_t struct"); + return -1; + } + + pkt_ipc = pktio_entry->s.ops_data; + memset(pkt_ipc, 0, sizeof(*pkt_ipc)); + odp_atomic_init_u32(&pkt_ipc->ready, 0); pkt_ipc->rx.cache = _ring_create("ipc_rx_cache", @@ -364,12 +373,15 @@ static int ipc_pktio_open(odp_pktio_t id ODP_UNUSED, snprintf(name, sizeof(name), "ipc:%s_info", tail); IPC_ODP_DBG("lookup for name %s for pid %d\n", name, pid); shm = odp_shm_import(name, pid, name); - if (ODP_SHM_INVALID == shm) + if (ODP_SHM_INVALID == shm) { + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; + } pinfo = odp_shm_addr(shm); if (!pinfo->master.init_done) { odp_shm_free(shm); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } pkt_ipc->pinfo = pinfo; @@ -384,6 +396,7 @@ static int ipc_pktio_open(odp_pktio_t id ODP_UNUSED, _ODP_ISHM_EXPORT | _ODP_ISHM_LOCK); if (ODP_SHM_INVALID == shm) { ODP_ERR("can not create shm %s\n", name); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } @@ -396,12 +409,14 @@ static int ipc_pktio_open(odp_pktio_t id ODP_UNUSED, ret = _ipc_init_master(pktio_entry, dev, pool); } + if (ret) + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return ret; } static void _ipc_free_ring_packets(pktio_entry_t *pktio_entry, _ring_t *r) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; uintptr_t offsets[PKTIO_IPC_ENTRIES]; int ret; void **rbuf_p; @@ -437,7 +452,7 @@ static void _ipc_free_ring_packets(pktio_entry_t *pktio_entry, _ring_t *r) static int ipc_pktio_recv_lockless(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[], int len) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; int pkts = 0; int i; _ring_t *r; @@ -590,7 +605,7 @@ static int ipc_pktio_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, static int ipc_pktio_send_lockless(pktio_entry_t *pktio_entry, const odp_packet_t pkt_table[], int len) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; _ring_t *r; void **rbuf_p; int ret; @@ -703,7 +718,7 @@ static int ipc_mac_addr_get(pktio_entry_t *pktio_entry ODP_UNUSED, static int ipc_start(pktio_entry_t *pktio_entry) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; uint32_t ready = odp_atomic_load_u32(&pkt_ipc->ready); if (ready) { @@ -719,7 +734,7 @@ static int ipc_start(pktio_entry_t *pktio_entry) static int ipc_stop(pktio_entry_t *pktio_entry) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; unsigned tx_send = 0, tx_free = 0; odp_atomic_store_u32(&pkt_ipc->ready, 0); @@ -746,7 +761,7 @@ static int ipc_stop(pktio_entry_t *pktio_entry) static int ipc_close(pktio_entry_t *pktio_entry) { - pktio_ops_ipc_data_t *pkt_ipc = odp_ops_data(pktio_entry, ipc); + pktio_ops_ipc_data_t *pkt_ipc = pktio_entry->s.ops_data; char ipc_shm_name[ODP_POOL_NAME_LEN + sizeof("_m_prod")]; char *dev = pktio_entry->s.name; char name[ODP_POOL_NAME_LEN]; @@ -776,7 +791,7 @@ static int ipc_close(pktio_entry_t *pktio_entry) _ring_destroy(ipc_shm_name); _ring_destroy("ipc_rx_cache"); - return 0; + return ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); } static int ipc_pktio_init_global(void) diff --git a/platform/linux-generic/pktio/loopback.c b/platform/linux-generic/pktio/loopback.c index 60bee5913..ff08364a2 100644 --- a/platform/linux-generic/pktio/loopback.c +++ b/platform/linux-generic/pktio/loopback.c @@ -32,20 +32,30 @@ static int loopback_stats_reset(pktio_entry_t *pktio_entry); static int loopback_open(odp_pktio_t id, pktio_entry_t *pktio_entry, const char *devname, odp_pool_t pool ODP_UNUSED) { - pktio_ops_loopback_data_t *pkt_lbk = - odp_ops_data(pktio_entry, loopback); + pktio_ops_loopback_data_t *pkt_lbk = NULL; if (strcmp(devname, "loop")) return -1; + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_lbk)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_loopback_data_t struct"); + return -1; + } + + pkt_lbk = pktio_entry->s.ops_data; + memset(pkt_lbk, 0, sizeof(*pkt_lbk)); + char loopq_name[ODP_QUEUE_NAME_LEN]; snprintf(loopq_name, sizeof(loopq_name), "%" PRIu64 "-pktio_loopq", odp_pktio_to_u64(id)); pkt_lbk->loopq = odp_queue_create(loopq_name, NULL); - if (pkt_lbk->loopq == ODP_QUEUE_INVALID) + if (pkt_lbk->loopq == ODP_QUEUE_INVALID) { + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; + } loopback_stats_reset(pktio_entry); @@ -54,10 +64,16 @@ static int loopback_open(odp_pktio_t id, pktio_entry_t *pktio_entry, static int loopback_close(pktio_entry_t *pktio_entry) { - pktio_ops_loopback_data_t *pkt_lbk = - odp_ops_data(pktio_entry, loopback); + int result = 0; + pktio_ops_loopback_data_t *pkt_lbk = pktio_entry->s.ops_data; + + if (odp_queue_destroy(pkt_lbk->loopq)) + result = -1; + + if (ODP_OPS_DATA_FREE(pktio_entry->s.ops_data)) + result = -1; - return odp_queue_destroy(pkt_lbk->loopq); + return result; } static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, @@ -72,8 +88,7 @@ static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, odp_time_t *ts = NULL; int num_rx = 0; int failed = 0; - pktio_ops_loopback_data_t *pkt_lbk = - odp_ops_data(pktio_entry, loopback); + pktio_ops_loopback_data_t *pkt_lbk = pktio_entry->s.ops_data; if (odp_unlikely(len > QUEUE_MULTI_MAX)) len = QUEUE_MULTI_MAX; @@ -170,8 +185,7 @@ static int loopback_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, int i; int ret; uint32_t bytes = 0; - pktio_ops_loopback_data_t *pkt_lbk = - odp_ops_data(pktio_entry, loopback); + pktio_ops_loopback_data_t *pkt_lbk = pktio_entry->s.ops_data; if (odp_unlikely(len > QUEUE_MULTI_MAX)) len = QUEUE_MULTI_MAX; @@ -255,8 +269,7 @@ static int loopback_capability(pktio_entry_t *pktio_entry ODP_UNUSED, static int loopback_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) { - pktio_ops_loopback_data_t *pkt_lbk = - odp_ops_data(pktio_entry, loopback); + pktio_ops_loopback_data_t *pkt_lbk = pktio_entry->s.ops_data; pkt_lbk->promisc = enable; return 0; @@ -264,8 +277,7 @@ static int loopback_promisc_mode_set(pktio_entry_t *pktio_entry, static int loopback_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_loopback_data_t *pkt_lbk = - odp_ops_data(pktio_entry, loopback); + pktio_ops_loopback_data_t *pkt_lbk = pktio_entry->s.ops_data; return pkt_lbk->promisc ? 1 : 0; } diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c index 29c449e40..2631c816d 100644 --- a/platform/linux-generic/pktio/netmap.c +++ b/platform/linux-generic/pktio/netmap.c @@ -50,8 +50,7 @@ static int netmap_stats_reset(pktio_entry_t *pktio_entry); static int netmap_do_ioctl(pktio_entry_t *pktio_entry, unsigned long cmd, int subcmd) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; struct ethtool_value eval; struct ifreq ifr; int err; @@ -138,8 +137,7 @@ static inline void map_netmap_rings(netmap_ring_t *rings, static int netmap_input_queues_config(pktio_entry_t *pktio_entry, const odp_pktin_queue_param_t *p) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; odp_pktin_mode_t mode = pktio_entry->s.param.in_mode; unsigned num_queues = p->num_queues; odp_bool_t lockless; @@ -167,8 +165,7 @@ static int netmap_input_queues_config(pktio_entry_t *pktio_entry, static int netmap_output_queues_config(pktio_entry_t *pktio_entry, const odp_pktout_queue_param_t *p) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; pkt_nm->lockless_tx = (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE); @@ -185,8 +182,7 @@ static int netmap_output_queues_config(pktio_entry_t *pktio_entry, static inline void netmap_close_descriptors(pktio_entry_t *pktio_entry) { int i, j; - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; for (i = 0; i < PKTIO_MAX_QUEUES; i++) { for (j = 0; j < NM_MAX_DESC; j++) { @@ -209,23 +205,30 @@ static inline void netmap_close_descriptors(pktio_entry_t *pktio_entry) static int netmap_close(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + int status = 0; + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; netmap_close_descriptors(pktio_entry); if (pkt_nm->sockfd != -1 && close(pkt_nm->sockfd) != 0) { __odp_errno = errno; ODP_ERR("close(sockfd): %s\n", strerror(errno)); - return -1; + + status = -1; } - return 0; + + if (ODP_OPS_DATA_FREE(pktio_entry->s.ops_data)) { + ODP_ERR("ops_data_free(netmap) failed\n"); + + status = -1; + } + + return status; } static int netmap_link_status(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; if (pkt_nm->is_virtual) return 1; @@ -246,8 +249,7 @@ static inline int netmap_wait_for_link(pktio_entry_t *pktio_entry) { int i; int ret; - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; /* Wait for the link to come up */ for (i = 0; i <= NM_WAIT_TIMEOUT; i++) { @@ -275,8 +277,7 @@ static inline int netmap_wait_for_link(pktio_entry_t *pktio_entry) */ static void netmap_init_capability(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; odp_pktio_capability_t *capa = &pkt_nm->capa; memset(&pkt_nm->capa, 0, sizeof(odp_pktio_capability_t)); @@ -343,8 +344,7 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, pktio_entry_t *pktio_entry, const char *prefix; uint32_t mtu; uint32_t buf_size; - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = NULL; struct nm_desc *desc; struct netmap_ring *ring; odp_pktin_hash_proto_t hash_proto; @@ -356,6 +356,13 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, pktio_entry_t *pktio_entry, if (pool == ODP_POOL_INVALID) return -1; + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_nm)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_netmap_data_t struct"); + return -1; + } + pkt_nm = pktio_entry->s.ops_data; + /* Init pktio entry */ memset(pkt_nm, 0, sizeof(*pkt_nm)); pkt_nm->sockfd = -1; @@ -476,8 +483,7 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, pktio_entry_t *pktio_entry, static int netmap_start(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; netmap_ring_t *desc_ring; struct nm_desc *desc_ptr; unsigned i; @@ -633,8 +639,7 @@ static inline int netmap_pkt_to_odp(pktio_entry_t *pktio_entry, netmap_slot_t slot_tbl[], int16_t slot_num, odp_time_t *ts) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; odp_packet_t pkt; odp_pool_t pool = pkt_nm->pool; odp_packet_hdr_t *pkt_hdr; @@ -750,8 +755,7 @@ static int netmap_recv(pktio_entry_t *pktio_entry, int index, odp_packet_t pkt_table[], int num) { struct nm_desc *desc; - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; unsigned first_desc_id = pkt_nm->rx_desc_ring[index].s.first; unsigned last_desc_id = pkt_nm->rx_desc_ring[index].s.last; unsigned desc_id; @@ -804,8 +808,7 @@ static int netmap_recv(pktio_entry_t *pktio_entry, int index, static int netmap_send(pktio_entry_t *pktio_entry, int index, const odp_packet_t pkt_table[], int num) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; struct pollfd polld; struct nm_desc *desc; struct netmap_ring *ring; @@ -880,8 +883,7 @@ static int netmap_send(pktio_entry_t *pktio_entry, int index, static int netmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; memcpy(mac_addr, pkt_nm->if_mac, ETH_ALEN); return ETH_ALEN; @@ -889,8 +891,7 @@ static int netmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) static uint32_t netmap_mtu_get(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; return pkt_nm->mtu; } @@ -898,8 +899,7 @@ static uint32_t netmap_mtu_get(pktio_entry_t *pktio_entry) static int netmap_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; if (pkt_nm->is_virtual) { __odp_errno = ENOTSUP; @@ -911,8 +911,7 @@ static int netmap_promisc_mode_set(pktio_entry_t *pktio_entry, static int netmap_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; if (pkt_nm->is_virtual) return 0; @@ -923,8 +922,7 @@ static int netmap_promisc_mode_get(pktio_entry_t *pktio_entry) static int netmap_capability(pktio_entry_t *pktio_entry, odp_pktio_capability_t *capa) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; *capa = pkt_nm->capa; return 0; @@ -933,8 +931,7 @@ static int netmap_capability(pktio_entry_t *pktio_entry, static int netmap_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) { memset(stats, 0, sizeof(*stats)); @@ -947,8 +944,7 @@ static int netmap_stats(pktio_entry_t *pktio_entry, static int netmap_stats_reset(pktio_entry_t *pktio_entry) { - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) { memset(&pktio_entry->s.stats, 0, @@ -962,8 +958,7 @@ static int netmap_stats_reset(pktio_entry_t *pktio_entry) static void netmap_print(pktio_entry_t *pktio_entry) { odp_pktin_hash_proto_t hash_proto; - pktio_ops_netmap_data_t *pkt_nm = - odp_ops_data(pktio_entry, netmap); + pktio_ops_netmap_data_t *pkt_nm = pktio_entry->s.ops_data; if (rss_conf_get_fd(pkt_nm->sockfd, pkt_nm->if_name, &hash_proto)) rss_conf_print(&hash_proto); diff --git a/platform/linux-generic/pktio/pcap.c b/platform/linux-generic/pktio/pcap.c index 5bfaeef0e..f3f000574 100644 --- a/platform/linux-generic/pktio/pcap.c +++ b/platform/linux-generic/pktio/pcap.c @@ -140,10 +140,17 @@ static int _pcapif_init_tx(pktio_ops_pcap_data_t *pcap) static int pcapif_init(odp_pktio_t id ODP_UNUSED, pktio_entry_t *pktio_entry, const char *devname, odp_pool_t pool) { - pktio_ops_pcap_data_t *pcap = odp_ops_data(pktio_entry, pcap); + pktio_ops_pcap_data_t *pcap = NULL; int ret; - memset(pcap, 0, sizeof(pktio_ops_pcap_data_t)); + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pcap)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_pcap_data_t struct"); + return -1; + } + pcap = pktio_entry->s.ops_data; + + memset(pcap, 0, sizeof(*pcap)); pcap->loop_cnt = 1; pcap->loops = 1; pcap->pool = pool; @@ -162,12 +169,15 @@ static int pcapif_init(odp_pktio_t id ODP_UNUSED, pktio_entry_t *pktio_entry, (void)pcapif_stats_reset(pktio_entry); + if (ret) + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); + return ret; } static int pcapif_close(pktio_entry_t *pktio_entry) { - pktio_ops_pcap_data_t *pcap = odp_ops_data(pktio_entry, pcap); + pktio_ops_pcap_data_t *pcap = pktio_entry->s.ops_data; if (pcap->tx_dump) pcap_dump_close(pcap->tx_dump); @@ -182,7 +192,7 @@ static int pcapif_close(pktio_entry_t *pktio_entry) free(pcap->fname_rx); free(pcap->fname_tx); - return 0; + return ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); } static int _pcapif_reopen(pktio_ops_pcap_data_t *pcap) @@ -214,7 +224,7 @@ static int pcapif_recv_pkt(pktio_entry_t *pktio_entry, int index ODP_UNUSED, odp_packet_t pkt; odp_packet_hdr_t *pkt_hdr; uint32_t pkt_len; - pktio_ops_pcap_data_t *pcap = odp_ops_data(pktio_entry, pcap); + pktio_ops_pcap_data_t *pcap = pktio_entry->s.ops_data; odp_time_t ts_val; odp_time_t *ts = NULL; @@ -297,7 +307,7 @@ static int _pcapif_dump_pkt(pktio_ops_pcap_data_t *pcap, odp_packet_t pkt) static int pcapif_send_pkt(pktio_entry_t *pktio_entry, int index ODP_UNUSED, const odp_packet_t pkts[], int len) { - pktio_ops_pcap_data_t *pcap = odp_ops_data(pktio_entry, pcap); + pktio_ops_pcap_data_t *pcap = pktio_entry->s.ops_data; int i; odp_ticketlock_lock(&pktio_entry->s.txl); @@ -365,7 +375,7 @@ static int pcapif_promisc_mode_set(pktio_entry_t *pktio_entry, { char filter_exp[64] = {0}; struct bpf_program bpf; - pktio_ops_pcap_data_t *pcap = odp_ops_data(pktio_entry, pcap); + pktio_ops_pcap_data_t *pcap = pktio_entry->s.ops_data; if (!pcap->rx) { pcap->promisc = enable; @@ -405,7 +415,7 @@ static int pcapif_promisc_mode_set(pktio_entry_t *pktio_entry, static int pcapif_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_pcap_data_t *pcap = odp_ops_data(pktio_entry, pcap); + pktio_ops_pcap_data_t *pcap = pktio_entry->s.ops_data; return pcap->promisc; } diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c index d9f85b29a..7e0485b99 100644 --- a/platform/linux-generic/pktio/socket.c +++ b/platform/linux-generic/pktio/socket.c @@ -110,16 +110,21 @@ int sendmmsg(int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) */ static int sock_close(pktio_entry_t *pktio_entry) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + int result = 0; + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) { __odp_errno = errno; ODP_ERR("close(sockfd): %s\n", strerror(errno)); - return -1; + result = -1; } - return 0; + if (ODP_OPS_DATA_FREE(pktio_entry->s.ops_data)) { + ODP_ERR("ops_data_free(socket) failed\n"); + result = -1; + } + + return result; } /* @@ -134,18 +139,25 @@ static int sock_setup_pkt(pktio_entry_t *pktio_entry, const char *netdev, struct ifreq ethreq; struct sockaddr_ll sa_ll; char shm_name[ODP_SHM_NAME_LEN]; - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = NULL; odp_pktio_stats_t cur_stats; + if (pool == ODP_POOL_INVALID) + return -1; + + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_sock)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_socket_data_t struct"); + return -1; + } + pkt_sock = pktio_entry->s.ops_data; + /* Init pktio entry */ memset(pkt_sock, 0, sizeof(*pkt_sock)); /* set sockfd to -1, because a valid socked might be initialized to 0 */ pkt_sock->sockfd = -1; - - if (pool == ODP_POOL_INVALID) - return -1; pkt_sock->pool = pool; + snprintf(shm_name, ODP_SHM_NAME_LEN, "%s-%s", "pktio", netdev); shm_name[ODP_SHM_NAME_LEN - 1] = '\0'; @@ -212,7 +224,6 @@ static int sock_setup_pkt(pktio_entry_t *pktio_entry, const char *netdev, error: sock_close(pktio_entry); - return -1; } @@ -259,8 +270,7 @@ static uint32_t _rx_pkt_to_iovec(odp_packet_t pkt, static int sock_mmsg_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, odp_packet_t pkt_table[], int len) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; odp_pool_t pool = pkt_sock->pool; odp_time_t ts_val; odp_time_t *ts = NULL; @@ -375,8 +385,7 @@ static uint32_t _tx_pkt_to_iovec(odp_packet_t pkt, static int sock_mmsg_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, const odp_packet_t pkt_table[], int len) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; struct mmsghdr msgvec[len]; struct iovec iovecs[len][MAX_SEGS]; int ret; @@ -422,8 +431,7 @@ static int sock_mmsg_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, */ static uint32_t sock_mtu_get(pktio_entry_t *pktio_entry) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; return pkt_sock->mtu; } @@ -434,8 +442,7 @@ static uint32_t sock_mtu_get(pktio_entry_t *pktio_entry) static int sock_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; memcpy(mac_addr, pkt_sock->if_mac, ETH_ALEN); return ETH_ALEN; @@ -447,8 +454,7 @@ static int sock_mac_addr_get(pktio_entry_t *pktio_entry, static int sock_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; return promisc_mode_set_fd(pkt_sock->sockfd, pktio_entry->s.name, enable); @@ -459,8 +465,7 @@ static int sock_promisc_mode_set(pktio_entry_t *pktio_entry, */ static int sock_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; return promisc_mode_get_fd(pkt_sock->sockfd, pktio_entry->s.name); @@ -468,8 +473,7 @@ static int sock_promisc_mode_get(pktio_entry_t *pktio_entry) static int sock_link_status(pktio_entry_t *pktio_entry) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; return link_status_fd(pkt_sock->sockfd, pktio_entry->s.name); @@ -493,8 +497,7 @@ static int sock_capability(pktio_entry_t *pktio_entry ODP_UNUSED, static int sock_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) { memset(stats, 0, sizeof(*stats)); @@ -506,8 +509,7 @@ static int sock_stats(pktio_entry_t *pktio_entry, static int sock_stats_reset(pktio_entry_t *pktio_entry) { - pktio_ops_socket_data_t *pkt_sock = - odp_ops_data(pktio_entry, socket); + pktio_ops_socket_data_t *pkt_sock = pktio_entry->s.ops_data; if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) { memset(&pktio_entry->s.stats, 0, diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c index b5c27ef4b..271c2f0f7 100644 --- a/platform/linux-generic/pktio/socket_mmap.c +++ b/platform/linux-generic/pktio/socket_mmap.c @@ -494,23 +494,27 @@ static int mmap_bind_sock(pktio_ops_socket_mmap_data_t *pkt_sock, static int sock_mmap_close(pktio_entry_t *entry) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = entry->s.ops_data; int ret; + int status = 0; ret = mmap_unmap_sock(pkt_sock); if (ret != 0) { ODP_ERR("mmap_unmap_sock() %s\n", strerror(errno)); - return -1; + status = -1; } if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) { __odp_errno = errno; ODP_ERR("close(sockfd): %s\n", strerror(errno)); - return -1; + status = -1; } - return 0; + if (ODP_OPS_DATA_FREE(entry->s.ops_data)) { + ODP_ERR("ops_data_free(sock_mmap) failed\n"); + status = -1; + } + return status; } static int sock_mmap_open(odp_pktio_t id ODP_UNUSED, @@ -520,22 +524,27 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED, int if_idx; int ret = 0; odp_pktio_stats_t cur_stats; + pktio_ops_socket_mmap_data_t *pkt_sock; + int fanout = 1; if (disable_pktio) return -1; - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); - int fanout = 1; + if (pool == ODP_POOL_INVALID) + return -1; + + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*pkt_sock)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_socket_mmap_data_t struct"); + return -1; + } + pkt_sock = pktio_entry->s.ops_data; /* Init pktio entry */ memset(pkt_sock, 0, sizeof(*pkt_sock)); /* set sockfd to -1, because a valid socked might be initialized to 0 */ pkt_sock->sockfd = -1; - if (pool == ODP_POOL_INVALID) - return -1; - /* Store eth buffer offset for pkt buffers from this pool */ pkt_sock->frame_offset = 0; @@ -610,8 +619,7 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED, static int sock_mmap_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, odp_packet_t pkt_table[], int len) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; int ret; odp_ticketlock_lock(&pktio_entry->s.rxl); @@ -626,8 +634,7 @@ static int sock_mmap_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, const odp_packet_t pkt_table[], int len) { int ret; - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; odp_ticketlock_lock(&pktio_entry->s.txl); ret = pkt_mmap_v2_tx(pkt_sock->tx_ring.sock, &pkt_sock->tx_ring, @@ -639,16 +646,14 @@ static int sock_mmap_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, static uint32_t sock_mmap_mtu_get(pktio_entry_t *pktio_entry) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; return mtu_get_fd(pkt_sock->sockfd, pktio_entry->s.name); } static int sock_mmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; memcpy(mac_addr, pkt_sock->if_mac, ETH_ALEN); return ETH_ALEN; @@ -657,8 +662,7 @@ static int sock_mmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) static int sock_mmap_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; return promisc_mode_set_fd(pkt_sock->sockfd, pktio_entry->s.name, enable); @@ -666,8 +670,7 @@ static int sock_mmap_promisc_mode_set(pktio_entry_t *pktio_entry, static int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; return promisc_mode_get_fd(pkt_sock->sockfd, pktio_entry->s.name); @@ -675,8 +678,7 @@ static int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry) static int sock_mmap_link_status(pktio_entry_t *pktio_entry) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; return link_status_fd(pkt_sock->sockfd, pktio_entry->s.name); } @@ -699,8 +701,7 @@ static int sock_mmap_capability(pktio_entry_t *pktio_entry ODP_UNUSED, static int sock_mmap_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) { memset(stats, 0, sizeof(*stats)); @@ -713,8 +714,7 @@ static int sock_mmap_stats(pktio_entry_t *pktio_entry, static int sock_mmap_stats_reset(pktio_entry_t *pktio_entry) { - pktio_ops_socket_mmap_data_t - *const pkt_sock = odp_ops_data(pktio_entry, socket_mmap); + pktio_ops_socket_mmap_data_t *const pkt_sock = pktio_entry->s.ops_data; if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) { memset(&pktio_entry->s.stats, 0, diff --git a/platform/linux-generic/pktio/tap.c b/platform/linux-generic/pktio/tap.c index 5bc7481d8..bb404d914 100644 --- a/platform/linux-generic/pktio/tap.c +++ b/platform/linux-generic/pktio/tap.c @@ -92,23 +92,31 @@ static int tap_pktio_open(odp_pktio_t id ODP_UNUSED, int fd, skfd, flags; uint32_t mtu; struct ifreq ifr; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = NULL; if (strncmp(devname, "tap:", 4) != 0) return -1; + if (pool == ODP_POOL_INVALID) + return -1; + + pktio_entry->s.ops_data = ODP_OPS_DATA_ALLOC(sizeof(*tap)); + if (odp_unlikely(pktio_entry->s.ops_data == NULL)) { + ODP_ERR("Failed to allocate pktio_ops_tap_data_t struct"); + return -1; + } + tap = pktio_entry->s.ops_data; + /* Init pktio entry */ memset(tap, 0, sizeof(*tap)); tap->fd = -1; tap->skfd = -1; - if (pool == ODP_POOL_INVALID) - return -1; - fd = open("/dev/net/tun", O_RDWR); if (fd < 0) { __odp_errno = errno; ODP_ERR("failed to open /dev/net/tun: %s\n", strerror(errno)); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } @@ -170,13 +178,14 @@ static int tap_pktio_open(odp_pktio_t id ODP_UNUSED, tap_err: close(fd); ODP_ERR("Tap device alloc failed.\n"); + ODP_OPS_DATA_FREE(pktio_entry->s.ops_data); return -1; } static int tap_pktio_start(pktio_entry_t *pktio_entry) { struct ifreq ifr; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; odp_memset(&ifr, 0, sizeof(ifr)); snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", @@ -207,7 +216,7 @@ static int tap_pktio_start(pktio_entry_t *pktio_entry) static int tap_pktio_stop(pktio_entry_t *pktio_entry) { struct ifreq ifr; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; odp_memset(&ifr, 0, sizeof(ifr)); snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", @@ -238,7 +247,7 @@ static int tap_pktio_stop(pktio_entry_t *pktio_entry) static int tap_pktio_close(pktio_entry_t *pktio_entry) { int ret = 0; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; if (tap->fd != -1 && close(tap->fd) != 0) { __odp_errno = errno; @@ -252,13 +261,18 @@ static int tap_pktio_close(pktio_entry_t *pktio_entry) ret = -1; } + if (ODP_OPS_DATA_FREE(pktio_entry->s.ops_data)) { + ODP_ERR("ops_data_free(tap) failed\n"); + ret = -1; + } + return ret; } static odp_packet_t pack_odp_pkt(pktio_entry_t *pktio_entry, const void *data, unsigned int len, odp_time_t *ts) { - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; odp_packet_t pkt; odp_packet_hdr_t *pkt_hdr; odp_packet_hdr_t parsed_hdr; @@ -302,7 +316,7 @@ static int tap_pktio_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, ssize_t retval; int i; uint8_t buf[BUF_SIZE]; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; odp_time_t ts_val; odp_time_t *ts = NULL; @@ -342,7 +356,7 @@ static int tap_pktio_send_lockless(pktio_entry_t *pktio_entry, int i, n; uint32_t pkt_len; uint8_t buf[BUF_SIZE]; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; for (i = 0; i < len; i++) { pkt_len = odp_packet_len(pkts[i]); @@ -404,7 +418,7 @@ static int tap_pktio_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED, static uint32_t tap_mtu_get(pktio_entry_t *pktio_entry) { uint32_t ret; - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; ret = mtu_get_fd(tap->skfd, pktio_entry->s.name + 4); if (ret > 0) @@ -416,7 +430,7 @@ static uint32_t tap_mtu_get(pktio_entry_t *pktio_entry) static int tap_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) { - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; return promisc_mode_set_fd(tap->skfd, pktio_entry->s.name + 4, enable); @@ -424,14 +438,14 @@ static int tap_promisc_mode_set(pktio_entry_t *pktio_entry, static int tap_promisc_mode_get(pktio_entry_t *pktio_entry) { - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; return promisc_mode_get_fd(tap->skfd, pktio_entry->s.name + 4); } static int tap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) { - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; memcpy(mac_addr, tap->if_mac, ETH_ALEN); return ETH_ALEN; @@ -439,7 +453,7 @@ static int tap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) static int tap_mac_addr_set(pktio_entry_t *pktio_entry, const void *mac_addr) { - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; memcpy(tap->if_mac, mac_addr, ETH_ALEN); @@ -449,7 +463,7 @@ static int tap_mac_addr_set(pktio_entry_t *pktio_entry, const void *mac_addr) static int tap_link_status(pktio_entry_t *pktio_entry) { - pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap); + pktio_ops_tap_data_t *tap = pktio_entry->s.ops_data; return link_status_fd(tap->skfd, pktio_entry->s.name + 4); }