ethdev: refine debug build option

PMDs use RTE_LIBRTE_<PMD_NAME>_DEBUG_RX|TX as build option to wrap
data path debug code. As .config has been removed since the meson build,
It is not friendly for new DPDK users to notice those debug options.

The patch introduces below build options for data path debug, so PMD
can choose to reuse them to avoid maintain their own.

- RTE_ETHDEV_DEBUG_RX
- RTE_ETHDEV_DEBUG_TX

All the build options are documented at programming guide
"3.1 Driver Option", so users can easily find them.

The original undocumented RTE_LIBRTE_ETHDEV_DEBUG will alias to
both RTE_ETHDEV_DEBUG_RX and RTE_ETHDEV_DEBUG_TX for backward
compatibility.

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
Qi Zhang 2021-03-31 17:52:47 +08:00 committed by Ferruh Yigit
parent 058ac0ddc5
commit bb6270dab3
2 changed files with 30 additions and 8 deletions

View File

@ -26,6 +26,22 @@ This will also build testpmd.
Detailed instructions are available
in the :doc:`meson build guide <../prog_guide/build-sdk-meson>`.
The ethdev layer supports below build options for debug purpose:
- ``RTE_ETHDEV_DEBUG_RX`` (default **disabled**)
Build with debug code on Rx path.
- ``RTE_ETHDEV_DEBUG_TX`` (default **disabled**)
Build with debug code on Tx path.
.. Note::
The ethdev library use above options to wrap debug code to trace invalid parameters
on data path APIs, so performance downgrade is expected when enabling those options.
Each PMD can decide to reuse them to wrap their own debug code in the Rx/Tx path.
Running testpmd in Linux
------------------------

View File

@ -148,6 +148,12 @@ extern "C" {
/* Use this macro to check if LRO API is supported */
#define RTE_ETHDEV_HAS_LRO_SUPPORT
/* Alias RTE_LIBRTE_ETHDEV_DEBUG for backward compatibility. */
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#define RTE_ETHDEV_DEBUG_RX
#define RTE_ETHDEV_DEBUG_TX
#endif
#include <rte_compat.h>
#include <rte_log.h>
#include <rte_interrupts.h>
@ -4941,7 +4947,7 @@ rte_eth_rx_burst(uint16_t port_id, uint16_t queue_id,
struct rte_eth_dev *dev = &rte_eth_devices[port_id];
uint16_t nb_rx;
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_RX
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, 0);
RTE_FUNC_PTR_OR_ERR_RET(*dev->rx_pkt_burst, 0);
@ -5075,11 +5081,11 @@ rte_eth_rx_descriptor_status(uint16_t port_id, uint16_t queue_id,
struct rte_eth_dev *dev;
void *rxq;
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_RX
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
#endif
dev = &rte_eth_devices[port_id];
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_RX
if (queue_id >= dev->data->nb_rx_queues)
return -ENODEV;
#endif
@ -5132,11 +5138,11 @@ static inline int rte_eth_tx_descriptor_status(uint16_t port_id,
struct rte_eth_dev *dev;
void *txq;
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_TX
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
#endif
dev = &rte_eth_devices[port_id];
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_TX
if (queue_id >= dev->data->nb_tx_queues)
return -ENODEV;
#endif
@ -5218,7 +5224,7 @@ rte_eth_tx_burst(uint16_t port_id, uint16_t queue_id,
{
struct rte_eth_dev *dev = &rte_eth_devices[port_id];
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_TX
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, 0);
RTE_FUNC_PTR_OR_ERR_RET(*dev->tx_pkt_burst, 0);
@ -5316,7 +5322,7 @@ rte_eth_tx_prepare(uint16_t port_id, uint16_t queue_id,
{
struct rte_eth_dev *dev;
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_TX
if (!rte_eth_dev_is_valid_port(port_id)) {
RTE_ETHDEV_LOG(ERR, "Invalid TX port_id=%u\n", port_id);
rte_errno = ENODEV;
@ -5326,7 +5332,7 @@ rte_eth_tx_prepare(uint16_t port_id, uint16_t queue_id,
dev = &rte_eth_devices[port_id];
#ifdef RTE_LIBRTE_ETHDEV_DEBUG
#ifdef RTE_ETHDEV_DEBUG_TX
if (queue_id >= dev->data->nb_tx_queues) {
RTE_ETHDEV_LOG(ERR, "Invalid TX queue_id=%u\n", queue_id);
rte_errno = EINVAL;