From patchwork Fri Feb 11 18:38:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ferruh Yigit X-Patchwork-Id: 107382 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D5C6FA00C2; Fri, 11 Feb 2022 19:38:44 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6A8F240683; Fri, 11 Feb 2022 19:38:44 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id BAADB40140 for ; Fri, 11 Feb 2022 19:38:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644604723; x=1676140723; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+rZscN5/6Md2fZApwv0LHWJ93ngTfjtX8dh2nSoS0ps=; b=HYbJ062ASGsaz+1Iooq5KkWtfAha3uQNvNzYIwMoeS2rqrm8axbK0iV8 3F4oIrEyRCi60xoijaMrYXyDgzSjbFTOW9lvAmpZHX+jRoaHHScep01th H40NQjO3cSx6bqjs4+OK0udO8t0a+BE3hVoxfHRGvzCxEQhOUaEV0AbrG MgNXzFSRsoGW91d38KbPVSdcMzOUGwu/+1fHMQj2SnMmXa8mifiz2zh7D plmIuT16cc2Yq1RKT+DEtlQ+EP6MPTxeooKKze3JSlG8AiuvlXmD62hd7 jF2B66eLfPS7l7/deDLMG6xW/C2XyfrZhryIF+xivIo5KZJeJBHqBHQES g==; X-IronPort-AV: E=McAfee;i="6200,9189,10255"; a="233339955" X-IronPort-AV: E=Sophos;i="5.88,361,1635231600"; d="scan'208";a="233339955" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Feb 2022 10:38:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,361,1635231600"; d="scan'208";a="634177305" Received: from silpixa00399752.ir.intel.com (HELO silpixa00399752.ger.corp.intel.com) ([10.237.222.27]) by orsmga004.jf.intel.com with ESMTP; 11 Feb 2022 10:38:34 -0800 From: Ferruh Yigit To: Ciara Loftus , Qi Zhang , Shepard Siegel , Ed Czeck , John Miller , Rasesh Mody , Shahed Shaikh , Ajit Khaparde , Somnath Kotur , Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao , Hemant Agrawal , Sachin Saxena , John Daley , Hyong Youb Kim , "Min Hu (Connor)" , Yisen Zhuang , Lijun Ou , Matan Azrad , Viacheslav Ovsiienko , Gagandeep Singh , Devendra Singh Rawat , Thomas Monjalon , Andrew Rybchenko , Ray Kinsella Cc: dev@dpdk.org, Ferruh Yigit , =?utf-8?q?Morten_Br?= =?utf-8?q?=C3=B8rup?= Subject: [PATCH v4 1/2] ethdev: introduce generic dummy packet burst function Date: Fri, 11 Feb 2022 18:38:31 +0000 Message-Id: <20220211183832.1904132-1-ferruh.yigit@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220208194437.426143-1-ferruh.yigit@intel.com> References: <20220208194437.426143-1-ferruh.yigit@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Multiple PMDs have dummy/noop Rx/Tx packet burst functions. These dummy functions are very simple, introduce a common function in the ethdev and update drivers to use it instead of each driver having its own functions. Signed-off-by: Ferruh Yigit Acked-by: Morten Brørup Acked-by: Viacheslav Ovsiienko Acked-by: Thomas Monjalon --- Cc: Ciara Loftus v2: * Convert inline function to actual function in new ethdev_driver.c file. This is because of functions pointer comparisons in PMDs. PMD interface of ethdev can be moved to 'ethdev_driver.c' later. v3: * updated af_xdp too v4: * Commit log updated and checkpatch warning fixed --- drivers/net/af_xdp/rte_eth_af_xdp.c | 26 ++------------- drivers/net/ark/ark_ethdev.c | 8 ++--- drivers/net/ark/ark_ethdev_rx.c | 9 ----- drivers/net/ark/ark_ethdev_rx.h | 2 -- drivers/net/ark/ark_ethdev_tx.c | 9 ----- drivers/net/ark/ark_ethdev_tx.h | 3 -- drivers/net/bnx2x/bnx2x_rxtx.c | 12 ++----- drivers/net/bnxt/bnxt.h | 4 --- drivers/net/bnxt/bnxt_cpr.c | 4 +-- drivers/net/bnxt/bnxt_rxr.c | 14 -------- drivers/net/bnxt/bnxt_txr.c | 14 -------- drivers/net/cnxk/cnxk_ethdev.c | 14 ++------ drivers/net/dpaa2/dpaa2_ethdev.c | 2 +- drivers/net/dpaa2/dpaa2_ethdev.h | 1 - drivers/net/dpaa2/dpaa2_rxtx.c | 25 -------------- drivers/net/enic/enic.h | 3 -- drivers/net/enic/enic_ethdev.c | 2 +- drivers/net/enic/enic_main.c | 2 +- drivers/net/enic/enic_rxtx.c | 11 ------ drivers/net/hns3/hns3_rxtx.c | 18 +++------- drivers/net/hns3/hns3_rxtx.h | 3 -- drivers/net/mlx4/mlx4.c | 8 ++--- drivers/net/mlx4/mlx4_mp.c | 4 +-- drivers/net/mlx4/mlx4_rxtx.c | 52 ----------------------------- drivers/net/mlx4/mlx4_rxtx.h | 4 --- drivers/net/mlx5/linux/mlx5_mp_os.c | 4 +-- drivers/net/mlx5/linux/mlx5_os.c | 4 +-- drivers/net/mlx5/mlx5.c | 4 +-- drivers/net/mlx5/mlx5_rx.c | 27 +-------------- drivers/net/mlx5/mlx5_rx.h | 2 -- drivers/net/mlx5/mlx5_trigger.c | 4 +-- drivers/net/mlx5/mlx5_tx.c | 25 -------------- drivers/net/mlx5/mlx5_tx.h | 2 -- drivers/net/mlx5/windows/mlx5_os.c | 4 +-- drivers/net/pfe/pfe_ethdev.c | 20 ++--------- drivers/net/qede/qede_ethdev.c | 4 +-- drivers/net/qede/qede_rxtx.c | 9 ----- drivers/net/qede/qede_rxtx.h | 3 -- lib/ethdev/ethdev_driver.c | 13 ++++++++ lib/ethdev/ethdev_driver.h | 17 ++++++++++ lib/ethdev/meson.build | 1 + lib/ethdev/version.map | 1 + 42 files changed, 73 insertions(+), 325 deletions(-) create mode 100644 lib/ethdev/ethdev_driver.c diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 4a37c11960e1..6ac710c6bdc6 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -1916,28 +1916,6 @@ afxdp_mp_send_fds(const struct rte_mp_msg *request, const void *peer) return 0; } -/* Secondary process rx function. RX is disabled because memory mapping of the - * rings being assigned by the kernel in the primary process only. - */ -static uint16_t -eth_af_xdp_rx_noop(void *queue __rte_unused, - struct rte_mbuf **bufs __rte_unused, - uint16_t nb_pkts __rte_unused) -{ - return 0; -} - -/* Secondary process tx function. TX is disabled because memory mapping of the - * rings being assigned by the kernel in the primary process only. - */ -static uint16_t -eth_af_xdp_tx_noop(void *queue __rte_unused, - struct rte_mbuf **bufs __rte_unused, - uint16_t nb_pkts __rte_unused) -{ - return 0; -} - static int rte_pmd_af_xdp_probe(struct rte_vdev_device *dev) { @@ -1961,8 +1939,8 @@ rte_pmd_af_xdp_probe(struct rte_vdev_device *dev) } eth_dev->dev_ops = &ops; eth_dev->device = &dev->device; - eth_dev->rx_pkt_burst = eth_af_xdp_rx_noop; - eth_dev->tx_pkt_burst = eth_af_xdp_tx_noop; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + eth_dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; eth_dev->process_private = (struct pmd_process_private *) rte_zmalloc_socket(name, sizeof(struct pmd_process_private), diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index b618cba3f023..230a1272e986 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -271,8 +271,8 @@ eth_ark_dev_init(struct rte_eth_dev *dev) dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; /* Use dummy function until setup */ - dev->rx_pkt_burst = ð_ark_recv_pkts_noop; - dev->tx_pkt_burst = ð_ark_xmit_pkts_noop; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; ark->bar0 = (uint8_t *)pci_dev->mem_resource[0].addr; ark->a_bar = (uint8_t *)pci_dev->mem_resource[2].addr; @@ -605,8 +605,8 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) if (ark->start_pg) ark_pktgen_pause(ark->pg); - dev->rx_pkt_burst = ð_ark_recv_pkts_noop; - dev->tx_pkt_burst = ð_ark_xmit_pkts_noop; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; /* STOP TX Side */ for (i = 0; i < dev->data->nb_tx_queues; i++) { diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 98658ce621e2..37a88cbedee4 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -228,15 +228,6 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, return 0; } -/* ************************************************************************* */ -uint16_t -eth_ark_recv_pkts_noop(void *rx_queue __rte_unused, - struct rte_mbuf **rx_pkts __rte_unused, - uint16_t nb_pkts __rte_unused) -{ - return 0; -} - /* ************************************************************************* */ uint16_t eth_ark_recv_pkts(void *rx_queue, diff --git a/drivers/net/ark/ark_ethdev_rx.h b/drivers/net/ark/ark_ethdev_rx.h index 859fcf1e6f71..f64b3dd137b3 100644 --- a/drivers/net/ark/ark_ethdev_rx.h +++ b/drivers/net/ark/ark_ethdev_rx.h @@ -20,8 +20,6 @@ int eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, uint32_t eth_ark_dev_rx_queue_count(void *rx_queue); int eth_ark_rx_stop_queue(struct rte_eth_dev *dev, uint16_t queue_id); int eth_ark_rx_start_queue(struct rte_eth_dev *dev, uint16_t queue_id); -uint16_t eth_ark_recv_pkts_noop(void *rx_queue, struct rte_mbuf **rx_pkts, - uint16_t nb_pkts); uint16_t eth_ark_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); void eth_ark_dev_rx_queue_release(void *rx_queue); diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c index 676e4115d3bf..abdce6a8cc0d 100644 --- a/drivers/net/ark/ark_ethdev_tx.c +++ b/drivers/net/ark/ark_ethdev_tx.c @@ -105,15 +105,6 @@ eth_ark_tx_desc_fill(struct ark_tx_queue *queue, } -/* ************************************************************************* */ -uint16_t -eth_ark_xmit_pkts_noop(void *vtxq __rte_unused, - struct rte_mbuf **tx_pkts __rte_unused, - uint16_t nb_pkts __rte_unused) -{ - return 0; -} - /* ************************************************************************* */ uint16_t eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) diff --git a/drivers/net/ark/ark_ethdev_tx.h b/drivers/net/ark/ark_ethdev_tx.h index 12c71a7158a9..7134dbfeed81 100644 --- a/drivers/net/ark/ark_ethdev_tx.h +++ b/drivers/net/ark/ark_ethdev_tx.h @@ -10,9 +10,6 @@ #include -uint16_t eth_ark_xmit_pkts_noop(void *vtxq, - struct rte_mbuf **tx_pkts, - uint16_t nb_pkts); uint16_t eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c index 66b0512c8695..cb5733c5972b 100644 --- a/drivers/net/bnx2x/bnx2x_rxtx.c +++ b/drivers/net/bnx2x/bnx2x_rxtx.c @@ -465,18 +465,10 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) return nb_rx; } -static uint16_t -bnx2x_rxtx_pkts_dummy(__rte_unused void *p_rxq, - __rte_unused struct rte_mbuf **rx_pkts, - __rte_unused uint16_t nb_pkts) -{ - return 0; -} - void bnx2x_dev_rxtx_init_dummy(struct rte_eth_dev *dev) { - dev->rx_pkt_burst = bnx2x_rxtx_pkts_dummy; - dev->tx_pkt_burst = bnx2x_rxtx_pkts_dummy; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; } void bnx2x_dev_rxtx_init(struct rte_eth_dev *dev) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 0cbb58b2cf3e..44724a9dfe91 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -1014,10 +1014,6 @@ void bnxt_print_link_info(struct rte_eth_dev *eth_dev); uint16_t bnxt_rss_hash_tbl_size(const struct bnxt *bp); int bnxt_link_update_op(struct rte_eth_dev *eth_dev, int wait_to_complete); -uint16_t bnxt_dummy_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, - uint16_t nb_pkts); -uint16_t bnxt_dummy_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, - uint16_t nb_pkts); extern const struct rte_flow_ops bnxt_flow_ops; diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c index 9b9285b79903..99af0f9e87ee 100644 --- a/drivers/net/bnxt/bnxt_cpr.c +++ b/drivers/net/bnxt/bnxt_cpr.c @@ -408,8 +408,8 @@ bool bnxt_is_recovery_enabled(struct bnxt *bp) void bnxt_stop_rxtx(struct rte_eth_dev *eth_dev) { - eth_dev->rx_pkt_burst = &bnxt_dummy_recv_pkts; - eth_dev->tx_pkt_burst = &bnxt_dummy_xmit_pkts; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + eth_dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; rte_eth_fp_ops[eth_dev->data->port_id].rx_pkt_burst = eth_dev->rx_pkt_burst; diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c index b60c2470f39e..5a9cf48e6739 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -1147,20 +1147,6 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, return nb_rx_pkts; } -/* - * Dummy DPDK callback for RX. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - */ -uint16_t -bnxt_dummy_recv_pkts(void *rx_queue __rte_unused, - struct rte_mbuf **rx_pkts __rte_unused, - uint16_t nb_pkts __rte_unused) -{ - return 0; -} - void bnxt_free_rx_rings(struct bnxt *bp) { int i; diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c index 3b8f2382f92e..7a7196a23731 100644 --- a/drivers/net/bnxt/bnxt_txr.c +++ b/drivers/net/bnxt/bnxt_txr.c @@ -527,20 +527,6 @@ uint16_t bnxt_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, return nb_tx_pkts; } -/* - * Dummy DPDK callback for TX. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - */ -uint16_t -bnxt_dummy_xmit_pkts(void *tx_queue __rte_unused, - struct rte_mbuf **tx_pkts __rte_unused, - uint16_t nb_pkts __rte_unused) -{ - return 0; -} - int bnxt_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) { struct bnxt *bp = dev->data->dev_private; diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c index 53dfb5eae80e..c6a9ada05bb4 100644 --- a/drivers/net/cnxk/cnxk_ethdev.c +++ b/drivers/net/cnxk/cnxk_ethdev.c @@ -942,16 +942,6 @@ nix_restore_queue_cfg(struct rte_eth_dev *eth_dev) return rc; } -static uint16_t -nix_eth_nop_burst(void *queue, struct rte_mbuf **mbufs, uint16_t pkts) -{ - RTE_SET_USED(queue); - RTE_SET_USED(mbufs); - RTE_SET_USED(pkts); - - return 0; -} - static void nix_set_nop_rxtx_function(struct rte_eth_dev *eth_dev) { @@ -962,8 +952,8 @@ nix_set_nop_rxtx_function(struct rte_eth_dev *eth_dev) * which caused app crash since rx/tx burst is still * on different lcores */ - eth_dev->tx_pkt_burst = nix_eth_nop_burst; - eth_dev->rx_pkt_burst = nix_eth_nop_burst; + eth_dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; rte_mb(); } diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 379daec5f4e8..5be4fef8fe68 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -2005,7 +2005,7 @@ dpaa2_dev_set_link_down(struct rte_eth_dev *dev) } /*changing tx burst function to avoid any more enqueues */ - dev->tx_pkt_burst = dummy_dev_tx; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; /* Loop while dpni_disable() attempts to drain the egress FQs * and confirm them back to us. diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 1b49f43103a7..e79a7fc2e286 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -264,7 +264,6 @@ __rte_internal uint16_t dpaa2_dev_tx_multi_txq_ordered(void **queue, struct rte_mbuf **bufs, uint16_t nb_pkts); -uint16_t dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); void dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci); void dpaa2_flow_clean(struct rte_eth_dev *dev); uint16_t dpaa2_dev_tx_conf(void *queue) __rte_unused; diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 81b28e20cb47..b8844fbdf107 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -1802,31 +1802,6 @@ dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) return num_tx; } -/** - * Dummy DPDK callback for TX. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - * - * @param dpdk_txq - * Generic pointer to TX queue structure. - * @param[in] pkts - * Packets to transmit. - * @param pkts_n - * Number of packets in array. - * - * @return - * Number of packets successfully transmitted (<= pkts_n). - */ -uint16_t -dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) -{ - (void)queue; - (void)bufs; - (void)nb_pkts; - return 0; -} - #if defined(RTE_TOOLCHAIN_GCC) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-qual" diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h index d5493c98345d..163a1f037e26 100644 --- a/drivers/net/enic/enic.h +++ b/drivers/net/enic/enic.h @@ -426,9 +426,6 @@ uint16_t enic_recv_pkts_64(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); uint16_t enic_noscatter_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); -uint16_t enic_dummy_recv_pkts(void *rx_queue, - struct rte_mbuf **rx_pkts, - uint16_t nb_pkts); uint16_t enic_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); uint16_t enic_simple_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 163be09809b1..a8d470e8ac93 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -538,7 +538,7 @@ static const uint32_t *enicpmd_dev_supported_ptypes_get(struct rte_eth_dev *dev) RTE_PTYPE_UNKNOWN }; - if (dev->rx_pkt_burst != enic_dummy_recv_pkts && + if (dev->rx_pkt_burst != rte_eth_pkt_burst_dummy && dev->rx_pkt_burst != NULL) { struct enic *enic = pmd_priv(dev); if (enic->overlay_offload) diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 97d97ea793f2..9f351de72eb4 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -1664,7 +1664,7 @@ int enic_set_mtu(struct enic *enic, uint16_t new_mtu) } /* replace Rx function with a no-op to avoid getting stale pkts */ - eth_dev->rx_pkt_burst = enic_dummy_recv_pkts; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; rte_eth_fp_ops[enic->port_id].rx_pkt_burst = eth_dev->rx_pkt_burst; rte_mb(); diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c index 74a90694c718..7a66d72275d9 100644 --- a/drivers/net/enic/enic_rxtx.c +++ b/drivers/net/enic/enic_rxtx.c @@ -31,17 +31,6 @@ #define rte_packet_prefetch(p) do {} while (0) #endif -/* dummy receive function to replace actual function in - * order to do safe reconfiguration operations. - */ -uint16_t -enic_dummy_recv_pkts(__rte_unused void *rx_queue, - __rte_unused struct rte_mbuf **rx_pkts, - __rte_unused uint16_t nb_pkts) -{ - return 0; -} - static inline uint16_t enic_recv_pkts_common(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts, const bool use_64b_desc) diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c index 3b72c2375a60..8dc6cfac704d 100644 --- a/drivers/net/hns3/hns3_rxtx.c +++ b/drivers/net/hns3/hns3_rxtx.c @@ -4383,14 +4383,6 @@ hns3_get_tx_function(struct rte_eth_dev *dev, eth_tx_prep_t *prep) return hns3_xmit_pkts; } -uint16_t -hns3_dummy_rxtx_burst(void *dpdk_txq __rte_unused, - struct rte_mbuf **pkts __rte_unused, - uint16_t pkts_n __rte_unused) -{ - return 0; -} - static void hns3_trace_rxtx_function(struct rte_eth_dev *dev) { @@ -4432,14 +4424,14 @@ hns3_set_rxtx_function(struct rte_eth_dev *eth_dev) eth_dev->rx_pkt_burst = hns3_get_rx_function(eth_dev); eth_dev->rx_descriptor_status = hns3_dev_rx_descriptor_status; eth_dev->tx_pkt_burst = hw->set_link_down ? - hns3_dummy_rxtx_burst : + rte_eth_pkt_burst_dummy : hns3_get_tx_function(eth_dev, &prep); eth_dev->tx_pkt_prepare = prep; eth_dev->tx_descriptor_status = hns3_dev_tx_descriptor_status; hns3_trace_rxtx_function(eth_dev); } else { - eth_dev->rx_pkt_burst = hns3_dummy_rxtx_burst; - eth_dev->tx_pkt_burst = hns3_dummy_rxtx_burst; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + eth_dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; eth_dev->tx_pkt_prepare = NULL; } @@ -4632,7 +4624,7 @@ hns3_tx_done_cleanup(void *txq, uint32_t free_cnt) if (dev->tx_pkt_burst == hns3_xmit_pkts) return hns3_tx_done_cleanup_full(q, free_cnt); - else if (dev->tx_pkt_burst == hns3_dummy_rxtx_burst) + else if (dev->tx_pkt_burst == rte_eth_pkt_burst_dummy) return 0; else return -ENOTSUP; @@ -4742,7 +4734,7 @@ hns3_enable_rxd_adv_layout(struct hns3_hw *hw) void hns3_stop_tx_datapath(struct rte_eth_dev *dev) { - dev->tx_pkt_burst = hns3_dummy_rxtx_burst; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; dev->tx_pkt_prepare = NULL; hns3_eth_dev_fp_ops_config(dev); diff --git a/drivers/net/hns3/hns3_rxtx.h b/drivers/net/hns3/hns3_rxtx.h index 094b65b7de70..a000318357ab 100644 --- a/drivers/net/hns3/hns3_rxtx.h +++ b/drivers/net/hns3/hns3_rxtx.h @@ -729,9 +729,6 @@ void hns3_init_rx_ptype_tble(struct rte_eth_dev *dev); void hns3_set_rxtx_function(struct rte_eth_dev *eth_dev); eth_tx_burst_t hns3_get_tx_function(struct rte_eth_dev *dev, eth_tx_prep_t *prep); -uint16_t hns3_dummy_rxtx_burst(void *dpdk_txq __rte_unused, - struct rte_mbuf **pkts __rte_unused, - uint16_t pkts_n __rte_unused); uint32_t hns3_get_tqp_intr_reg_offset(uint16_t tqp_intr_id); void hns3_set_queue_intr_gl(struct hns3_hw *hw, uint16_t queue_id, diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 3f3c4a7c7214..910b76a92c42 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -350,8 +350,8 @@ mlx4_dev_stop(struct rte_eth_dev *dev) return 0; DEBUG("%p: detaching flows from all RX queues", (void *)dev); priv->started = 0; - dev->tx_pkt_burst = mlx4_tx_burst_removed; - dev->rx_pkt_burst = mlx4_rx_burst_removed; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; rte_wmb(); /* Disable datapath on secondary process. */ mlx4_mp_req_stop_rxtx(dev); @@ -383,8 +383,8 @@ mlx4_dev_close(struct rte_eth_dev *dev) DEBUG("%p: closing device \"%s\"", (void *)dev, ((priv->ctx != NULL) ? priv->ctx->device->name : "")); - dev->rx_pkt_burst = mlx4_rx_burst_removed; - dev->tx_pkt_burst = mlx4_tx_burst_removed; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; rte_wmb(); /* Disable datapath on secondary process. */ mlx4_mp_req_stop_rxtx(dev); diff --git a/drivers/net/mlx4/mlx4_mp.c b/drivers/net/mlx4/mlx4_mp.c index 8fcfb5490ee9..1da64910aadd 100644 --- a/drivers/net/mlx4/mlx4_mp.c +++ b/drivers/net/mlx4/mlx4_mp.c @@ -150,8 +150,8 @@ mp_secondary_handle(const struct rte_mp_msg *mp_msg, const void *peer) break; case MLX4_MP_REQ_STOP_RXTX: INFO("port %u stopping datapath", dev->data->port_id); - dev->tx_pkt_burst = mlx4_tx_burst_removed; - dev->rx_pkt_burst = mlx4_rx_burst_removed; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; rte_mb(); mp_init_msg(dev, &mp_res, param->type); res->result = 0; diff --git a/drivers/net/mlx4/mlx4_rxtx.c b/drivers/net/mlx4/mlx4_rxtx.c index ed9e41fcdea9..059e432a63fc 100644 --- a/drivers/net/mlx4/mlx4_rxtx.c +++ b/drivers/net/mlx4/mlx4_rxtx.c @@ -1338,55 +1338,3 @@ mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) rxq->stats.ipackets += i; return i; } - -/** - * Dummy DPDK callback for Tx. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - * - * @param dpdk_txq - * Generic pointer to Tx queue structure. - * @param[in] pkts - * Packets to transmit. - * @param pkts_n - * Number of packets in array. - * - * @return - * Number of packets successfully transmitted (<= pkts_n). - */ -uint16_t -mlx4_tx_burst_removed(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) -{ - (void)dpdk_txq; - (void)pkts; - (void)pkts_n; - rte_mb(); - return 0; -} - -/** - * Dummy DPDK callback for Rx. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - * - * @param dpdk_rxq - * Generic pointer to Rx queue structure. - * @param[out] pkts - * Array to store received packets. - * @param pkts_n - * Maximum number of packets in array. - * - * @return - * Number of packets successfully received (<= pkts_n). - */ -uint16_t -mlx4_rx_burst_removed(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) -{ - (void)dpdk_rxq; - (void)pkts; - (void)pkts_n; - rte_mb(); - return 0; -} diff --git a/drivers/net/mlx4/mlx4_rxtx.h b/drivers/net/mlx4/mlx4_rxtx.h index 83e9534cd0a7..70f3cd868058 100644 --- a/drivers/net/mlx4/mlx4_rxtx.h +++ b/drivers/net/mlx4/mlx4_rxtx.h @@ -149,10 +149,6 @@ uint16_t mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n); uint16_t mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n); -uint16_t mlx4_tx_burst_removed(void *dpdk_txq, struct rte_mbuf **pkts, - uint16_t pkts_n); -uint16_t mlx4_rx_burst_removed(void *dpdk_rxq, struct rte_mbuf **pkts, - uint16_t pkts_n); /* mlx4_txq.c */ diff --git a/drivers/net/mlx5/linux/mlx5_mp_os.c b/drivers/net/mlx5/linux/mlx5_mp_os.c index c448a3e9eb87..e607089e0e20 100644 --- a/drivers/net/mlx5/linux/mlx5_mp_os.c +++ b/drivers/net/mlx5/linux/mlx5_mp_os.c @@ -192,8 +192,8 @@ struct rte_mp_msg mp_res; break; case MLX5_MP_REQ_STOP_RXTX: DRV_LOG(INFO, "port %u stopping datapath", dev->data->port_id); - dev->rx_pkt_burst = removed_rx_burst; - dev->tx_pkt_burst = removed_tx_burst; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; rte_mb(); mp_init_msg(&priv->mp_id, &mp_res, param->type); res->result = 0; diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index aecdc5a68abb..bbe05bb837e0 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1623,8 +1623,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, DRV_LOG(DEBUG, "port %u MTU is %u", eth_dev->data->port_id, priv->mtu); /* Initialize burst functions to prevent crashes before link-up. */ - eth_dev->rx_pkt_burst = removed_rx_burst; - eth_dev->tx_pkt_burst = removed_tx_burst; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + eth_dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; eth_dev->dev_ops = &mlx5_dev_ops; eth_dev->rx_descriptor_status = mlx5_rx_descriptor_status; eth_dev->tx_descriptor_status = mlx5_tx_descriptor_status; diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 67eda41a60a5..5571e9067787 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1559,8 +1559,8 @@ mlx5_dev_close(struct rte_eth_dev *dev) mlx5_action_handle_flush(dev); mlx5_flow_meter_flush(dev, NULL); /* Prevent crashes when queues are still in use. */ - dev->rx_pkt_burst = removed_rx_burst; - dev->tx_pkt_burst = removed_tx_burst; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; rte_wmb(); /* Disable datapath on secondary process. */ mlx5_mp_os_req_stop_rxtx(dev); diff --git a/drivers/net/mlx5/mlx5_rx.c b/drivers/net/mlx5/mlx5_rx.c index f388fcc31395..11ea935d72f0 100644 --- a/drivers/net/mlx5/mlx5_rx.c +++ b/drivers/net/mlx5/mlx5_rx.c @@ -252,7 +252,7 @@ mlx5_rx_queue_count(void *rx_queue) dev = &rte_eth_devices[rxq->port_id]; if (dev->rx_pkt_burst == NULL || - dev->rx_pkt_burst == removed_rx_burst) { + dev->rx_pkt_burst == rte_eth_pkt_burst_dummy) { rte_errno = ENOTSUP; return -rte_errno; } @@ -1153,31 +1153,6 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) return i; } -/** - * Dummy DPDK callback for RX. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - * - * @param dpdk_rxq - * Generic pointer to RX queue structure. - * @param[out] pkts - * Array to store received packets. - * @param pkts_n - * Maximum number of packets in array. - * - * @return - * Number of packets successfully received (<= pkts_n). - */ -uint16_t -removed_rx_burst(void *dpdk_rxq __rte_unused, - struct rte_mbuf **pkts __rte_unused, - uint16_t pkts_n __rte_unused) -{ - rte_mb(); - return 0; -} - /* * Vectorized Rx routines are not compiled in when required vector instructions * are not supported on a target architecture. diff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h index cb5d51340db7..7e417819f7e8 100644 --- a/drivers/net/mlx5/mlx5_rx.h +++ b/drivers/net/mlx5/mlx5_rx.h @@ -275,8 +275,6 @@ __rte_noinline int mlx5_rx_err_handle(struct mlx5_rxq_data *rxq, uint8_t vec); void mlx5_mprq_buf_free(struct mlx5_mprq_buf *buf); uint16_t mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n); -uint16_t removed_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, - uint16_t pkts_n); int mlx5_rx_descriptor_status(void *rx_queue, uint16_t offset); uint32_t mlx5_rx_queue_count(void *rx_queue); void mlx5_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id, diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index 74c9c0a4fff8..3a59237b1a7a 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1244,8 +1244,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) dev->data->dev_started = 0; /* Prevent crashes when queues are still in use. */ - dev->rx_pkt_burst = removed_rx_burst; - dev->tx_pkt_burst = removed_tx_burst; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; rte_wmb(); /* Disable datapath on secondary process. */ mlx5_mp_os_req_stop_rxtx(dev); diff --git a/drivers/net/mlx5/mlx5_tx.c b/drivers/net/mlx5/mlx5_tx.c index fd2cf2096753..8453b2701a9f 100644 --- a/drivers/net/mlx5/mlx5_tx.c +++ b/drivers/net/mlx5/mlx5_tx.c @@ -135,31 +135,6 @@ mlx5_tx_error_cqe_handle(struct mlx5_txq_data *__rte_restrict txq, return 0; } -/** - * Dummy DPDK callback for TX. - * - * This function is used to temporarily replace the real callback during - * unsafe control operations on the queue, or in case of error. - * - * @param dpdk_txq - * Generic pointer to TX queue structure. - * @param[in] pkts - * Packets to transmit. - * @param pkts_n - * Number of packets in array. - * - * @return - * Number of packets successfully transmitted (<= pkts_n). - */ -uint16_t -removed_tx_burst(void *dpdk_txq __rte_unused, - struct rte_mbuf **pkts __rte_unused, - uint16_t pkts_n __rte_unused) -{ - rte_mb(); - return 0; -} - /** * Update completion queue consuming index via doorbell * and flush the completed data buffers. diff --git a/drivers/net/mlx5/mlx5_tx.h b/drivers/net/mlx5/mlx5_tx.h index 398cadfeaa46..c4b8271f6fb3 100644 --- a/drivers/net/mlx5/mlx5_tx.h +++ b/drivers/net/mlx5/mlx5_tx.h @@ -221,8 +221,6 @@ void mlx5_txq_dynf_timestamp_set(struct rte_eth_dev *dev); /* mlx5_tx.c */ -uint16_t removed_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, - uint16_t pkts_n); void mlx5_tx_handle_completion(struct mlx5_txq_data *__rte_restrict txq, unsigned int olx __rte_unused); int mlx5_tx_descriptor_status(void *tx_queue, uint16_t offset); diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c index ac0af0ff7d43..7f3532426f1f 100644 --- a/drivers/net/mlx5/windows/mlx5_os.c +++ b/drivers/net/mlx5/windows/mlx5_os.c @@ -574,8 +574,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, DRV_LOG(DEBUG, "port %u MTU is %u.", eth_dev->data->port_id, priv->mtu); /* Initialize burst functions to prevent crashes before link-up. */ - eth_dev->rx_pkt_burst = removed_rx_burst; - eth_dev->tx_pkt_burst = removed_tx_burst; + eth_dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + eth_dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; eth_dev->dev_ops = &mlx5_dev_ops; eth_dev->rx_descriptor_status = mlx5_rx_descriptor_status; eth_dev->tx_descriptor_status = mlx5_tx_descriptor_status; diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c index edf32aa70da6..c2991ab1ccaa 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -235,22 +235,6 @@ pfe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return nb_pkts; } -static uint16_t -pfe_dummy_xmit_pkts(__rte_unused void *tx_queue, - __rte_unused struct rte_mbuf **tx_pkts, - __rte_unused uint16_t nb_pkts) -{ - return 0; -} - -static uint16_t -pfe_dummy_recv_pkts(__rte_unused void *rxq, - __rte_unused struct rte_mbuf **rx_pkts, - __rte_unused uint16_t nb_pkts) -{ - return 0; -} - static int pfe_eth_open(struct rte_eth_dev *dev) { @@ -383,8 +367,8 @@ pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/) gemac_disable(priv->EMAC_baseaddr); gpi_disable(priv->GPI_baseaddr); - dev->rx_pkt_burst = &pfe_dummy_recv_pkts; - dev->tx_pkt_burst = &pfe_dummy_xmit_pkts; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; return 0; } diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index a1122a297e6b..ea6b71f09355 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -322,8 +322,8 @@ qede_assign_rxtx_handlers(struct rte_eth_dev *dev, bool is_dummy) bool use_tx_offload = false; if (is_dummy) { - dev->rx_pkt_burst = qede_rxtx_pkts_dummy; - dev->tx_pkt_burst = qede_rxtx_pkts_dummy; + dev->rx_pkt_burst = rte_eth_pkt_burst_dummy; + dev->tx_pkt_burst = rte_eth_pkt_burst_dummy; return; } diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 7088c57b501d..85784f4a82a6 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -2734,15 +2734,6 @@ qede_xmit_pkts_cmt(void *p_fp_cmt, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return eng0_pkts + eng1_pkts; } -uint16_t -qede_rxtx_pkts_dummy(__rte_unused void *p_rxq, - __rte_unused struct rte_mbuf **pkts, - __rte_unused uint16_t nb_pkts) -{ - return 0; -} - - /* this function does a fake walk through over completion queue * to calculate number of BDs used by HW. * At the end, it restores the state of completion queue. diff --git a/drivers/net/qede/qede_rxtx.h b/drivers/net/qede/qede_rxtx.h index 11ed1d9b9c50..013a4a07c716 100644 --- a/drivers/net/qede/qede_rxtx.h +++ b/drivers/net/qede/qede_rxtx.h @@ -272,9 +272,6 @@ uint16_t qede_recv_pkts_cmt(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t qede_recv_pkts_regular(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); -uint16_t qede_rxtx_pkts_dummy(void *p_rxq, - struct rte_mbuf **pkts, - uint16_t nb_pkts); int qede_start_queues(struct rte_eth_dev *eth_dev); diff --git a/lib/ethdev/ethdev_driver.c b/lib/ethdev/ethdev_driver.c new file mode 100644 index 000000000000..fb7323f4d327 --- /dev/null +++ b/lib/ethdev/ethdev_driver.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2022 Intel Corporation + */ + +#include "ethdev_driver.h" + +uint16_t +rte_eth_pkt_burst_dummy(void *queue __rte_unused, + struct rte_mbuf **pkts __rte_unused, + uint16_t nb_pkts __rte_unused) +{ + return 0; +} diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index 617b450d5763..8de8e1c67113 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h @@ -1509,6 +1509,23 @@ rte_eth_linkstatus_get(const struct rte_eth_dev *dev, *dst = __atomic_load_n(src, __ATOMIC_SEQ_CST); } +/** + * @internal + * Dummy DPDK callback for Rx/Tx packet burst. + * + * @param queue + * Pointer to Rx/Tx queue + * @param pkts + * Packet array + * @param nb_pkts + * Number of packets in packet array + */ +__rte_internal +uint16_t +rte_eth_pkt_burst_dummy(void *queue __rte_unused, + struct rte_mbuf **pkts __rte_unused, + uint16_t nb_pkts __rte_unused); + /** * Allocate an unique switch domain identifier. * diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build index 0205c853df53..a094585bf715 100644 --- a/lib/ethdev/meson.build +++ b/lib/ethdev/meson.build @@ -2,6 +2,7 @@ # Copyright(c) 2017 Intel Corporation sources = files( + 'ethdev_driver.c', 'ethdev_private.c', 'ethdev_profile.c', 'ethdev_trace_points.c', diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index 1a43282ce45d..d5cc56a56023 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -289,6 +289,7 @@ INTERNAL { rte_eth_hairpin_queue_peer_unbind; rte_eth_hairpin_queue_peer_update; rte_eth_ip_reassembly_dynfield_register; + rte_eth_pkt_burst_dummy; rte_eth_representor_id_get; rte_eth_switch_domain_alloc; rte_eth_switch_domain_free;