diff mbox series

[CLOUD-DEV,v3,9/9] linux-gen: pktio: dpdk: use generic pktio_ops data storage

Message ID 1507636815-18816-10-git-send-email-odpbot@yandex.ru
State Superseded
Headers show
Series [CLOUD-DEV,v3,1/9] linux-gen: pktio: introduce generic pktio_ops data storage | expand

Commit Message

Github ODP bot Oct. 10, 2017, noon UTC
From: Bogdan Pricope <bogdan.pricope@linaro.org>


Signed-off-by: Bogdan Pricope <bogdan.pricope@linaro.org>

---
/** Email created from pull request 196 (bogdanPricope:cloud_dev_pktio_ops_data_pr)
 ** https://github.com/Linaro/odp/pull/196
 ** Patch: https://github.com/Linaro/odp/pull/196.patch
 ** Base sha: 3d3c8f71f39ff139695d6f4b8e5ea17502c5f7cf
 ** Merge commit sha: 2bae88983ff377d83fcf9c99bf5c380275454327
 **/
 .../linux-dpdk/include/odp_packet_io_internal.h    |   7 +-
 platform/linux-dpdk/pktio/dpdk.c                   |  57 +++++-------
 .../linux-generic/include/odp_packet_io_internal.h |   6 +-
 .../include/odp_pktio_ops_subsystem.h              |  12 +--
 platform/linux-generic/pktio/dpdk.c                | 100 +++++++++++----------
 5 files changed, 82 insertions(+), 100 deletions(-)
diff mbox series

Patch

diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h
index d31c449e2..089ad38c5 100644
--- a/platform/linux-dpdk/include/odp_packet_io_internal.h
+++ b/platform/linux-dpdk/include/odp_packet_io_internal.h
@@ -29,7 +29,6 @@  extern "C" {
 
 #define PKTIO_MAX_QUEUES 64
 #include <linux/if_ether.h>
-#include <pktio/dpdk.h>
 
 /* Forward declaration */
 typedef union pktio_entry_u pktio_entry_t;
@@ -42,10 +41,8 @@  typedef union pktio_entry_u pktio_entry_t;
 
 struct pktio_entry {
 	const pktio_ops_module_t *ops;	/**< Implementation specific methods */
-	union {
-		pktio_ops_data_t ops_data;
-		uint8_t _ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE];
-	};
+	uint8_t ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE]; /**< 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-dpdk/pktio/dpdk.c b/platform/linux-dpdk/pktio/dpdk.c
index d7a90197a..b54f06b8b 100644
--- a/platform/linux-dpdk/pktio/dpdk.c
+++ b/platform/linux-dpdk/pktio/dpdk.c
@@ -4,6 +4,8 @@ 
  * SPDX-License-Identifier:     BSD-3-Clause
  */
 
+#include <config.h>
+
 #include <odp_posix_extensions.h>
 #include <stdio.h>
 #include <errno.h>
@@ -39,18 +41,6 @@  static pktio_ops_module_t dpdk_pktio_ops;
 
 static uint32_t mtu_get_pkt_dpdk(pktio_entry_t *pktio_entry);
 
-static inline pktio_ops_dpdk_data_t *
-	__retrieve_op_data(pktio_entry_t *pktio)
-{
-	return (pktio_ops_dpdk_data_t *)(pktio->ops_data(dpdk));
-}
-
-static inline void __release_op_data(pktio_entry_t *pktio)
-{
-	free(pktio->ops_data(dpdk));
-	pktio->ops_data(dpdk) = NULL;
-}
-
 /* Test if s has only digits or not. Dpdk pktio uses only digits.*/
 static int _dpdk_netdev_is_valid(const char *s)
 {
@@ -108,7 +98,7 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	odp_pktin_mode_t mode = pktio_entry->s.param.in_mode;
 
 	/**
@@ -138,7 +128,7 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 
 	if (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE)
 		pkt_dpdk->lockless_tx = 1;
@@ -155,7 +145,8 @@  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 = NULL;
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
 	int i;
 
 	if (!_dpdk_netdev_is_valid(netdev)) {
@@ -164,9 +155,6 @@  static int setup_pkt_dpdk(odp_pktio_t pktio ODP_UNUSED,
 		return -1;
 	}
 
-	pktio_entry->ops_data(dpdk) = malloc(sizeof(pktio_ops_dpdk_data_t));
-	pkt_dpdk = __retrieve_op_data(pktio_entry);
-
 	if (odp_unlikely(pkt_dpdk == NULL)) {
 		ODP_ERR("Failed to allocate pktio_ops_dpdk_data_t struct");
 		return -1;
@@ -202,12 +190,11 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 
 	if (pktio_entry->s.state == PKTIO_STATE_STOPPED)
 		rte_eth_dev_close(pkt_dpdk->portid);
 
-	__release_op_data(pktio_entry);
 	return 0;
 }
 
@@ -215,7 +202,7 @@  static int start_pkt_dpdk(pktio_entry_t *pktio_entry)
 {
 	int ret, i;
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint8_t portid = pkt_dpdk->portid;
 	int sid = rte_eth_dev_socket_id(pkt_dpdk->portid);
 	int socket_id =  sid < 0 ? 0 : sid;
@@ -324,7 +311,8 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
+
 	rte_eth_dev_stop(pkt_dpdk->portid);
 	return 0;
 }
@@ -373,7 +361,7 @@  static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
 {
 	uint16_t nb_rx, i;
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	odp_packet_t *saved_pkt_table;
 	uint8_t min = pkt_dpdk->min_rx_burst;
 	odp_time_t ts_val;
@@ -490,7 +478,7 @@  static int send_pkt_dpdk(pktio_entry_t *pktio_entry, int index,
 {
 	int pkts;
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 
 	if (!pkt_dpdk->lockless_tx)
 		odp_ticketlock_lock(&pkt_dpdk->tx_lock[index]);
@@ -543,7 +531,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint16_t mtu = 0;
 	int ret;
 
@@ -604,7 +592,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint8_t portid = pkt_dpdk->portid;
 
 	if (enable)
@@ -648,7 +636,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint8_t portid = pkt_dpdk->portid;
 
 	if (pkt_dpdk->vdev_sysc_promisc)
@@ -660,25 +648,27 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
+
 	rte_eth_macaddr_get(pkt_dpdk->portid,
 			    (struct ether_addr *)mac_addr);
 	return ETH_ALEN;
 }
 
-
 static int capability_pkt_dpdk(pktio_entry_t *pktio_entry,
 			       odp_pktio_capability_t *capa)
 {
 	const pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
+
 	*capa = pkt_dpdk->capa;
 	return 0;
 }
+
 static int link_status_pkt_dpdk(pktio_entry_t *pktio_entry)
 {
 	const pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	struct rte_eth_link link;
 
 	rte_eth_link_get(pkt_dpdk->portid, &link);
@@ -702,7 +692,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	int ret;
 	struct rte_eth_stats rte_stats;
 
@@ -721,7 +711,8 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
+
 	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 79f5b1082..b26a35d25 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -50,10 +50,8 @@  typedef union pktio_entry_u pktio_entry_t;
 
 struct pktio_entry {
 	const pktio_ops_module_t *ops;	/**< Implementation specific methods */
-	union {
-		pktio_ops_data_t ops_data;  /**< IO operation specific data */
-		uint8_t _ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE];
-	};
+	uint8_t ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE]; /**< 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 5449eccbd..f1ff48832 100644
--- a/platform/linux-generic/include/odp_pktio_ops_subsystem.h
+++ b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
@@ -78,21 +78,11 @@  typedef ODP_MODULE_CLASS(pktio_ops) {
 	odp_api_proto(pktio_ops, print) print;
 } pktio_ops_module_t;
 
-/* Per implementation private data
- * TODO: refactory each implementation to hide it internally
- */
-typedef union {
-	void *dpdk;
-} pktio_ops_data_t;
-
-/* Extract pktio ops data from pktio entry structure */
-#define ops_data(mod) s.ops_data.mod
-
 /* 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)
+	((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s.ops_data)
 
 #endif
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c
index 484af82c5..990e1a57a 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -14,6 +14,7 @@ 
 #include <ctype.h>
 #include <unistd.h>
 #include <math.h>
+#include <linux/if_ether.h>
 
 #include <odp/api/cpumask.h>
 
@@ -39,18 +40,6 @@ 
 #include <rte_tcp.h>
 #include <rte_string_fns.h>
 
-static inline pktio_ops_dpdk_data_t *
-	__retrieve_op_data(pktio_entry_t *pktio)
-{
-	return (pktio_ops_dpdk_data_t *)(pktio->ops_data(dpdk));
-}
-
-static inline void __release_op_data(pktio_entry_t *pktio)
-{
-	free(pktio->ops_data(dpdk));
-	pktio->ops_data(dpdk) = NULL;
-}
-
 #if ODP_DPDK_ZERO_COPY
 ODP_STATIC_ASSERT(CONFIG_PACKET_HEADROOM == RTE_PKTMBUF_HEADROOM,
 		  "ODP and DPDK headroom sizes not matching!");
@@ -363,6 +352,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);
 	odp_packet_t pkt;
 	odp_packet_hdr_t *pkt_hdr;
 	uint16_t pkt_len;
@@ -371,11 +361,11 @@  static inline int mbuf_to_pkt(pktio_entry_t *pktio_entry,
 	int i, j;
 	int nb_pkts = 0;
 	int alloc_len, num;
-	odp_pool_t pool = __retrieve_op_data(pktio_entry)->pool;
 	odp_pktin_config_opt_t *pktin_cfg = &pktio_entry->s.config.pktin;
+	odp_pool_t pool = pkt_dpdk->pool;
 
 	/* Allocate maximum sized packets */
-	alloc_len = __retrieve_op_data(pktio_entry)->data_room;
+	alloc_len = pkt_dpdk->data_room;
 
 	num = packet_alloc_multi(pool, alloc_len, pkt_table, mbuf_num);
 	if (num != mbuf_num) {
@@ -545,7 +535,7 @@  static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry,
 			      const odp_packet_t pkt_table[], uint16_t num)
 {
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	int i, j;
 	char *data;
 	uint16_t pkt_len;
@@ -589,6 +579,8 @@  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);
 	odp_packet_t pkt;
 	odp_packet_hdr_t *pkt_hdr;
 	uint16_t pkt_len;
@@ -596,8 +588,8 @@  static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry,
 	void *data;
 	int i;
 	int nb_pkts = 0;
-	odp_pool_t pool = __retrieve_op_data(pktio_entry)->pool;
 	odp_pktin_config_opt_t *pktin_cfg = &pktio_entry->s.config.pktin;
+	odp_pool_t pool = pkt_dpdk->pool;
 
 	for (i = 0; i < mbuf_num; i++) {
 		odp_packet_hdr_t parsed_hdr;
@@ -662,7 +654,7 @@  static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry,
 				   uint16_t *copy_count)
 {
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	odp_pktout_config_opt_t *pktout_cfg = &pktio_entry->s.config.pktout;
 	int i;
 	*copy_count = 0;
@@ -752,7 +744,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint32_t mtu = 0;
 
 	if (rte_eth_dev_get_mtu(pkt_dpdk->port_id, (uint16_t *)&mtu))
@@ -846,7 +838,7 @@  static int dpdk_setup_port(pktio_entry_t *pktio_entry)
 {
 	int ret;
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	struct rte_eth_rss_conf rss_conf;
 	uint16_t hw_ip_checksum = 0;
 
@@ -895,7 +887,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	unsigned idx;
 	unsigned i, j;
 
@@ -913,7 +905,6 @@  static int dpdk_close(pktio_entry_t *pktio_entry)
 	if (!ODP_DPDK_ZERO_COPY)
 		rte_mempool_free(pkt_dpdk->pkt_pool);
 
-	__release_op_data(pktio_entry);
 	return 0;
 }
 
@@ -1046,6 +1037,8 @@  static int dpdk_pktio_init_local(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);
 	odp_pktin_mode_t mode = pktio_entry->s.param.in_mode;
 	odp_bool_t lockless;
 
@@ -1059,9 +1052,9 @@  static int dpdk_input_queues_config(pktio_entry_t *pktio_entry,
 		lockless = 0;
 
 	if (p->hash_enable && p->num_queues > 1)
-		__retrieve_op_data(pktio_entry)->hash = p->hash_proto;
+		pkt_dpdk->hash = p->hash_proto;
 
-	__retrieve_op_data(pktio_entry)->lockless_rx = lockless;
+	pkt_dpdk->lockless_rx = lockless;
 
 	return 0;
 }
@@ -1070,7 +1063,7 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	odp_bool_t lockless;
 
 	if (p->op_mode == ODP_PKTIO_OP_MT_UNSAFE)
@@ -1087,7 +1080,7 @@  static void dpdk_init_capability(pktio_entry_t *pktio_entry,
 				 struct rte_eth_dev_info *dev_info)
 {
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	odp_pktio_capability_t *capa = &pkt_dpdk->capa;
 	int ptype_cnt;
 	int ptype_l3_ipv4 = 0;
@@ -1164,7 +1157,8 @@  static int dpdk_open(odp_pktio_t id ODP_UNUSED,
 		     const char *netdev,
 		     odp_pool_t pool)
 {
-	pktio_ops_dpdk_data_t *pkt_dpdk = NULL;
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
 	struct rte_eth_dev_info dev_info;
 	struct rte_mempool *pkt_pool;
 	char pool_name[RTE_MEMPOOL_NAMESIZE];
@@ -1192,9 +1186,6 @@  static int dpdk_open(odp_pktio_t id ODP_UNUSED,
 		dpdk_initialized = 1;
 	}
 
-	pktio_entry->ops_data(dpdk) = malloc(sizeof(pktio_ops_dpdk_data_t));
-	pkt_dpdk = __retrieve_op_data(pktio_entry);
-
 	if (odp_unlikely(pkt_dpdk == NULL)) {
 		ODP_ERR("Failed to allocate pktio_ops_dpdk_data_t struct");
 		return -1;
@@ -1208,7 +1199,6 @@  static int dpdk_open(odp_pktio_t id ODP_UNUSED,
 
 	if (rte_eth_dev_count() == 0) {
 		ODP_ERR("No DPDK ports found\n");
-		__release_op_data(pktio_entry);
 		return -1;
 	}
 
@@ -1217,7 +1207,6 @@  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");
-		__release_op_data(pktio_entry);
 		return -1;
 	}
 	pkt_dpdk->mtu = mtu + _ODP_ETHHDR_LEN;
@@ -1254,7 +1243,6 @@  static int dpdk_open(odp_pktio_t id ODP_UNUSED,
 	}
 	if (pkt_pool == NULL) {
 		ODP_ERR("Cannot init mbuf packet pool\n");
-		__release_op_data(pktio_entry);
 		return -1;
 	}
 
@@ -1280,7 +1268,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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint8_t port_id = pkt_dpdk->port_id;
 	int ret;
 	unsigned i;
@@ -1331,7 +1319,10 @@  static int dpdk_start(pktio_entry_t *pktio_entry)
 
 static int dpdk_stop(pktio_entry_t *pktio_entry)
 {
-	rte_eth_dev_stop(__retrieve_op_data(pktio_entry)->port_id);
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
+
+	rte_eth_dev_stop(pkt_dpdk->port_id);
 
 	return 0;
 }
@@ -1340,7 +1331,7 @@  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 =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	pkt_cache_t *rx_cache = &pkt_dpdk->rx_cache[index];
 	odp_time_t ts_val;
 	odp_time_t *ts = NULL;
@@ -1416,7 +1407,7 @@  static int dpdk_send(pktio_entry_t *pktio_entry, int index,
 {
 	struct rte_mbuf *tx_mbufs[num];
 	pktio_ops_dpdk_data_t *pkt_dpdk =
-		__retrieve_op_data(pktio_entry);
+		odp_ops_data(pktio_entry, dpdk);
 	uint16_t copy_count = 0;
 	int tx_pkts;
 	int i;
@@ -1479,16 +1470,21 @@  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)
 {
-	rte_eth_macaddr_get(__retrieve_op_data(pktio_entry)->port_id,
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
+
+	rte_eth_macaddr_get(pkt_dpdk->port_id,
 			    (struct ether_addr *)mac_addr);
 	return ETH_ALEN;
 }
 
 static int dpdk_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable)
 {
-	uint8_t port_id = __retrieve_op_data(pktio_entry)->port_id;
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
+	uint8_t port_id = pkt_dpdk->port_id;
 
-	if (__retrieve_op_data(pktio_entry)->vdev_sysc_promisc)
+	if (pkt_dpdk->vdev_sysc_promisc)
 		return dpdk_vdev_promisc_mode_set(port_id, enable);
 
 	if (enable)
@@ -1501,9 +1497,11 @@  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)
 {
-	uint8_t port_id = __retrieve_op_data(pktio_entry)->port_id;
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
+	uint8_t port_id = pkt_dpdk->port_id;
 
-	if (__retrieve_op_data(pktio_entry)->vdev_sysc_promisc)
+	if (pkt_dpdk->vdev_sysc_promisc)
 		return dpdk_vdev_promisc_mode_get(port_id);
 	else
 		return rte_eth_promiscuous_get(port_id);
@@ -1512,18 +1510,22 @@  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)
 {
-	*capa = __retrieve_op_data(pktio_entry)->capa;
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
+
+	*capa = pkt_dpdk->capa;
 	return 0;
 }
 
 static int dpdk_link_status(pktio_entry_t *pktio_entry)
 {
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
 	struct rte_eth_link link;
 
 	memset(&link, 0, sizeof(struct rte_eth_link));
 
-	rte_eth_link_get_nowait(
-		__retrieve_op_data(pktio_entry)->port_id, &link);
+	rte_eth_link_get_nowait(pkt_dpdk->port_id, &link);
 
 	return link.link_status;
 }
@@ -1542,11 +1544,12 @@  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);
 	int ret;
 	struct rte_eth_stats rte_stats;
 
-	ret = rte_eth_stats_get(
-		__retrieve_op_data(pktio_entry)->port_id, &rte_stats);
+	ret = rte_eth_stats_get(pkt_dpdk->port_id, &rte_stats);
 
 	if (ret == 0) {
 		stats_convert(&rte_stats, stats);
@@ -1557,7 +1560,10 @@  static int dpdk_stats(pktio_entry_t *pktio_entry, odp_pktio_stats_t *stats)
 
 static int dpdk_stats_reset(pktio_entry_t *pktio_entry)
 {
-	rte_eth_stats_reset(__retrieve_op_data(pktio_entry)->port_id);
+	pktio_ops_dpdk_data_t *pkt_dpdk =
+		odp_ops_data(pktio_entry, dpdk);
+
+	rte_eth_stats_reset(pkt_dpdk->port_id);
 	return 0;
 }