DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: "Loftus, Ciara" <ciara.loftus@intel.com>,
	Shepard Siegel <shepard.siegel@atomicrules.com>,
	Ed Czeck <ed.czeck@atomicrules.com>,
	"John Miller" <john.miller@atomicrules.com>,
	Rasesh Mody <rmody@marvell.com>,
	Shahed Shaikh <shshaikh@marvell.com>,
	Ajit Khaparde <ajit.khaparde@broadcom.com>,
	Somnath Kotur <somnath.kotur@broadcom.com>,
	Nithin Dabilpuram <ndabilpuram@marvell.com>,
	Kiran Kumar K <kirankumark@marvell.com>,
	Sunil Kumar Kori <skori@marvell.com>,
	Satha Rao <skoteshwar@marvell.com>,
	Hemant Agrawal <hemant.agrawal@nxp.com>,
	"Sachin Saxena" <sachin.saxena@oss.nxp.com>,
	"Daley, John" <johndale@cisco.com>,
	"Hyong Youb Kim" <hyonkim@cisco.com>,
	"Min Hu (Connor)" <humin29@huawei.com>,
	 "Yisen Zhuang" <yisen.zhuang@huawei.com>,
	Lijun Ou <oulijun@huawei.com>, Matan Azrad <matan@nvidia.com>,
	Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
	Gagandeep Singh <g.singh@nxp.com>,
	Devendra Singh Rawat <dsinghrawat@marvell.com>,
	Thomas Monjalon <thomas@monjalon.net>,
	"Andrew Rybchenko" <andrew.rybchenko@oktetlabs.ru>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [PATCH] ethdev: introduce generic dummy packet burst function
Date: Thu, 10 Feb 2022 08:59:52 +0000	[thread overview]
Message-ID: <5ab2d11f-f52d-47b8-093a-a68fb1420f68@intel.com> (raw)
In-Reply-To: <PH0PR11MB4791EFE09B1F2A5F4226D3558E2F9@PH0PR11MB4791.namprd11.prod.outlook.com>

On 2/10/2022 7:38 AM, Loftus, Ciara wrote:
>> Subject: [PATCH] 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>
>> ---
>> Cc: Ciara Loftus <ciara.loftus@intel.com>
>> ---
> 
> [snip]
> 
>> 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();
> 
> The mlx4 and mlx5 PMDs lose a call to rte_mb() when switching over to the new dummy functions. Maybe the maintainer can comment on whether that's an issue or not? Other than that LGTM.
> 

I wasn't also sure why dummy Rx/Tx needs meeory barrier.

Matan, Slava, can you please comment?

> Ciara
> 
>> -	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 099e72935a3a..31eb0a1ce28e 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.h b/lib/ethdev/ethdev_driver.h
>> index 8f0ac0adf0ae..075f97a4b37a 100644
>> --- a/lib/ethdev/ethdev_driver.h
>> +++ b/lib/ethdev/ethdev_driver.h
>> @@ -1432,6 +1432,25 @@ 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
>> + */
>> +static inline 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;
>> +}
>> +
>>   /**
>>    * Allocate an unique switch domain identifier.
>>    *
>> --
>> 2.34.1
> 


  reply	other threads:[~2022-02-10  9:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-08 19:44 Ferruh Yigit
2022-02-10  7:38 ` Loftus, Ciara
2022-02-10  8:59   ` Ferruh Yigit [this message]
2022-02-10 11:04 ` Morten Brørup
2022-02-10 11:39   ` Andrew Rybchenko
2022-02-10 11:47     ` Morten Brørup
2022-02-10 11:51       ` Andrew Rybchenko
2022-02-10 14:52         ` Slava Ovsiienko
2022-02-10 13:58 ` Ferruh Yigit
2022-02-10 16:30   ` Stephen Hemminger
2022-02-10 18:40     ` Thomas Monjalon
2022-02-11  9:49 ` [PATCH v2] " Ferruh Yigit
2022-02-11 17:14 ` [PATCH v3 1/2] " Ferruh Yigit
2022-02-11 17:14   ` [PATCH v3 2/2] ethdev: move driver interface functions to its own file Ferruh Yigit
2022-02-11 18:09     ` Thomas Monjalon
2022-02-11 18:39       ` Ferruh Yigit
2022-02-11 18:03   ` [PATCH v3 1/2] ethdev: introduce generic dummy packet burst function Thomas Monjalon
2022-02-11 18:38 ` [PATCH v4 " Ferruh Yigit
2022-02-11 18:38   ` [PATCH v4 2/2] ethdev: move driver interface functions to its own file Ferruh Yigit
2022-02-11 18:55     ` Thomas Monjalon
2022-02-11 19:01       ` Ferruh Yigit
2022-02-11 19:11 ` [PATCH v5 1/2] ethdev: introduce generic dummy packet burst function Ferruh Yigit
2022-02-11 19:11   ` [PATCH v5 2/2] ethdev: move driver interface functions to its own file Ferruh Yigit
2022-02-11 20:18   ` [PATCH v5 1/2] ethdev: introduce generic dummy packet burst function Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5ab2d11f-f52d-47b8-093a-a68fb1420f68@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=ciara.loftus@intel.com \
    --cc=dev@dpdk.org \
    --cc=dsinghrawat@marvell.com \
    --cc=ed.czeck@atomicrules.com \
    --cc=g.singh@nxp.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=humin29@huawei.com \
    --cc=hyonkim@cisco.com \
    --cc=john.miller@atomicrules.com \
    --cc=johndale@cisco.com \
    --cc=kirankumark@marvell.com \
    --cc=matan@nvidia.com \
    --cc=ndabilpuram@marvell.com \
    --cc=oulijun@huawei.com \
    --cc=rmody@marvell.com \
    --cc=sachin.saxena@oss.nxp.com \
    --cc=shepard.siegel@atomicrules.com \
    --cc=shshaikh@marvell.com \
    --cc=skori@marvell.com \
    --cc=skoteshwar@marvell.com \
    --cc=somnath.kotur@broadcom.com \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@nvidia.com \
    --cc=yisen.zhuang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).