ethdev: introduce generic dummy packet burst function
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 <ferruh.yigit@intel.com> Acked-by: Morten Brørup <mb@smartsharesystems.com> Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com> Acked-by: Thomas Monjalon <thomas@monjalon.net>
This commit is contained in:
parent
6ef4c62a42
commit
a41f593f1b
@ -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),
|
||||
|
@ -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++) {
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -10,9 +10,6 @@
|
||||
#include <ethdev_driver.h>
|
||||
|
||||
|
||||
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);
|
||||
|
@ -463,18 +463,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)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -940,16 +940,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)
|
||||
{
|
||||
@ -960,8 +950,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();
|
||||
}
|
||||
|
||||
|
@ -2004,7 +2004,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.
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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)
|
||||
|
@ -4380,14 +4380,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)
|
||||
{
|
||||
@ -4429,14 +4421,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;
|
||||
}
|
||||
|
||||
@ -4629,7 +4621,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;
|
||||
@ -4739,7 +4731,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);
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -2732,15 +2732,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.
|
||||
|
@ -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);
|
||||
|
||||
|
13
lib/ethdev/ethdev_driver.c
Normal file
13
lib/ethdev/ethdev_driver.c
Normal file
@ -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;
|
||||
}
|
@ -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.
|
||||
*
|
||||
|
@ -2,6 +2,7 @@
|
||||
# Copyright(c) 2017 Intel Corporation
|
||||
|
||||
sources = files(
|
||||
'ethdev_driver.c',
|
||||
'ethdev_private.c',
|
||||
'ethdev_profile.c',
|
||||
'ethdev_trace_points.c',
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user