DPDK patches and discussions
 help / color / mirror / Atom feed
From: Long Li <longli@microsoft.com>
To: Stephen Hemminger <stephen@networkplumber.org>,
	Ferruh Yigit <ferruh.yigit@amd.com>
Cc: "longli@linuxonhyperv.com" <longli@linuxonhyperv.com>,
	Thomas Monjalon <thomas@monjalon.net>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	Jerin Jacob Kollanukkaran <jerinj@marvell.com>,
	David Marchand <david.marchand@redhat.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	Ajay Sharma <sharmaajay@microsoft.com>,
	"stable@dpdk.org" <stable@dpdk.org>,
	Luca Boccassi <bluca@debian.org>,
	Qi Z Zhang <qi.z.zhang@intel.com>,
	Ajit Khaparde <ajit.khaparde@broadcom.com>,
	Bruce Richardson <bruce.richardson@intel.com>,
	Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,
	Olivier Matz <olivier.matz@6wind.com>,
	Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
Subject: RE: [PATCH] net/mana: use RTE_LOG_DP for logs on datapath
Date: Fri, 3 Mar 2023 02:16:42 +0000	[thread overview]
Message-ID: <PH7PR21MB326371786C14F5C10EDF51BCCEB39@PH7PR21MB3263.namprd21.prod.outlook.com> (raw)
In-Reply-To: <20230224095120.32c25481@hermes.local>

> Subject: Re: [PATCH] net/mana: use RTE_LOG_DP for logs on datapath
> 
> On Thu, 23 Feb 2023 10:09:17 -0800
> Stephen Hemminger <stephen@networkplumber.org> wrote:
> 
> > On Thu, 23 Feb 2023 14:07:25 +0000
> > Ferruh Yigit <ferruh.yigit@amd.com> wrote:
> >
> > > Overall I am not sure if anyone is interested in driver datapath
> > > logs other than driver developers themselves.
> > >
> > > For datapath logging I think there are two concerns,
> > > 1) It should not eat *any* cycles unless explicitly enabled
> > > 2) Capability of enable/disable them because of massive amount of
> > > log it can generate
> > >
> > >
> > > Currently there are two existing approaches for driver datapath logging:
> > > i)  Controlled by 'RTE_ETHDEV_DEBUG_RX/TX' compile time flag,
> > >     when enabled 'rte_log()' is used with Rx/Tx specific log type.
> > > ii) 'RTE_LOG_DP' ', compile time control per logtype via
> > >     'RTE_LOG_DP_LEVEL',
> > >      when enabled 'rte_log()' is used with PMD logtype.
> > >
> > >
> > > In (ii), need to re-compile code when you need to increase the log
> > > verbosity, and it leaks to production code as mentioned above.
> > >
> > > For (i), developer compiles once enabling debug, later can fine
> > > grain log level dynamically. This is more DPDK developer focused approach.
> > >
> > >
> > > [1]
> > > According above, what do you think to retire 'RTE_LOG_DP', (at least
> > > within ethdev datapath), and chose (i) as preferred datapath logging?
> >
> > I agree, the current tx/rx logging is a mess.
> > Each driver is different, each driver has to have something to enable
> > it; and it really isn't useful beyond the driver developer.
> >
> > Using tracing seems like a much better option. Could we agree on a
> > common set of trace points for drivers and fix all drivers to use the same
> thing.
> > Probably will cause some upset among driver developers:
> > "where did my nice printf's go, now I have to learn tracing"
> > but DPDK has a good facility here, lets use it.
> >
> > My proposal would be:
> > 	- agree on common set of trace points
> > 	- apply to all drivers
> > 	- remove RTE_LOG_DP()
> > 	- remove per driver RX/TX options
> > 	- side effect, more uses of RTE_LOGTYPE_PMD go away.
> 
> Here is an example of using tracepoints instead.
> Compile tested for example only.
> 
> Note: using tracepoints it is possible to keep some of the tracepoints even if
> fastpath is not enabled.  Things like running out of Tx or Mbuf is not something
> that is perf critical; but would be good for application to see.

Thank you for the example.

I sent another patch converting data path logs (mana) to trace points.

Long

> 
> 
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c |   7 --
>  drivers/net/ixgbe/ixgbe_logs.h   |  18 -----
>  drivers/net/ixgbe/ixgbe_rxtx.c   |  95 +++++++-------------------
>  drivers/net/ixgbe/ixgbe_trace.h  | 110
> +++++++++++++++++++++++++++++++
>  4 files changed, 133 insertions(+), 97 deletions(-)  create mode 100644
> drivers/net/ixgbe/ixgbe_trace.h
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 88118bc30560..07f8ccdd97cb 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -8317,10 +8317,3 @@
> RTE_PMD_REGISTER_PARAM_STRING(net_ixgbe_vf,
> 
>  RTE_LOG_REGISTER_SUFFIX(ixgbe_logtype_init, init, NOTICE);
> RTE_LOG_REGISTER_SUFFIX(ixgbe_logtype_driver, driver, NOTICE);
> -
> -#ifdef RTE_ETHDEV_DEBUG_RX
> -RTE_LOG_REGISTER_SUFFIX(ixgbe_logtype_rx, rx, DEBUG); -#endif -#ifdef
> RTE_ETHDEV_DEBUG_TX -RTE_LOG_REGISTER_SUFFIX(ixgbe_logtype_tx, tx,
> DEBUG); -#endif diff --git a/drivers/net/ixgbe/ixgbe_logs.h
> b/drivers/net/ixgbe/ixgbe_logs.h index 00ef797ca103..f70fa1fd4afd 100644
> --- a/drivers/net/ixgbe/ixgbe_logs.h
> +++ b/drivers/net/ixgbe/ixgbe_logs.h
> @@ -12,24 +12,6 @@ extern int ixgbe_logtype_init;
> 
>  #define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, " >>")
> 
> -#ifdef RTE_ETHDEV_DEBUG_RX
> -extern int ixgbe_logtype_rx;
> -#define PMD_RX_LOG(level, fmt, args...)			\
> -	rte_log(RTE_LOG_ ## level, ixgbe_logtype_rx,	\
> -		"%s(): " fmt "\n", __func__, ## args)
> -#else
> -#define PMD_RX_LOG(level, fmt, args...) do { } while (0) -#endif
> -
> -#ifdef RTE_ETHDEV_DEBUG_TX
> -extern int ixgbe_logtype_tx;
> -#define PMD_TX_LOG(level, fmt, args...)			\
> -	rte_log(RTE_LOG_ ## level, ixgbe_logtype_tx,	\
> -		"%s(): " fmt "\n", __func__, ## args)
> -#else
> -#define PMD_TX_LOG(level, fmt, args...) do { } while (0) -#endif
> -
>  extern int ixgbe_logtype_driver;
>  #define PMD_DRV_LOG_RAW(level, fmt, args...) \
>  	rte_log(RTE_LOG_ ## level, ixgbe_logtype_driver, "%s(): " fmt, \ diff --
> git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c index
> c9d6ca9efea4..f9f0ffebee8e 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -46,6 +46,7 @@
>  #include <rte_vect.h>
> 
>  #include "ixgbe_logs.h"
> +#include "ixgbe_trace.h"
>  #include "base/ixgbe_api.h"
>  #include "base/ixgbe_vf.h"
>  #include "ixgbe_ethdev.h"
> @@ -581,11 +582,8 @@ ixgbe_xmit_cleanup(struct ixgbe_tx_queue *txq)
>  	desc_to_clean_to = sw_ring[desc_to_clean_to].last_id;
>  	status = txr[desc_to_clean_to].wb.status;
>  	if (!(status & rte_cpu_to_le_32(IXGBE_TXD_STAT_DD))) {
> -		PMD_TX_LOG(DEBUG,
> -			   "TX descriptor %4u is not done"
> -			   "(port=%d queue=%d)",
> -			   desc_to_clean_to,
> -			   txq->port_id, txq->queue_id);
> +		ixgbe_trace_tx_not_done(txq->port_id, txq->queue_id,
> +desc_to_clean_to);
> +
>  		/* Failed to clean any descriptors, better luck next time */
>  		return -(1);
>  	}
> @@ -598,11 +596,8 @@ ixgbe_xmit_cleanup(struct ixgbe_tx_queue *txq)
>  		nb_tx_to_clean = (uint16_t)(desc_to_clean_to -
>  						last_desc_cleaned);
> 
> -	PMD_TX_LOG(DEBUG,
> -		   "Cleaning %4u TX descriptors: %4u to %4u "
> -		   "(port=%d queue=%d)",
> -		   nb_tx_to_clean, last_desc_cleaned, desc_to_clean_to,
> -		   txq->port_id, txq->queue_id);
> +	ixgbe_trace_tx_done(txq->port_id, txq->queue_id,
> +			    nb_tx_to_clean, last_desc_cleaned,
> desc_to_clean_to);
> 
>  	/*
>  	 * The last descriptor to clean is done, so that means all the @@ -
> 734,26 +729,14 @@ ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf
> **tx_pkts,
>  		if (tx_last >= txq->nb_tx_desc)
>  			tx_last = (uint16_t) (tx_last - txq->nb_tx_desc);
> 
> -		PMD_TX_LOG(DEBUG, "port_id=%u queue_id=%u pktlen=%u"
> -			   " tx_first=%u tx_last=%u",
> -			   (unsigned) txq->port_id,
> -			   (unsigned) txq->queue_id,
> -			   (unsigned) pkt_len,
> -			   (unsigned) tx_id,
> -			   (unsigned) tx_last);
> -
> +		ixgbe_trace_tx(txq->port_id, txq->queue_id, pkt_len, tx_id,
> tx_last);
>  		/*
>  		 * Make sure there are enough TX descriptors available to
>  		 * transmit the entire packet.
>  		 * nb_used better be less than or equal to txq->tx_rs_thresh
>  		 */
>  		if (nb_used > txq->nb_tx_free) {
> -			PMD_TX_LOG(DEBUG,
> -				   "Not enough free TX descriptors "
> -				   "nb_used=%4u nb_free=%4u "
> -				   "(port=%d queue=%d)",
> -				   nb_used, txq->nb_tx_free,
> -				   txq->port_id, txq->queue_id);
> +			ixgbe_trace_tx_full(txq->port_id, txq->queue_id,
> nb_used,
> +txq->nb_tx_free);
> 
>  			if (ixgbe_xmit_cleanup(txq) != 0) {
>  				/* Could not clean any descriptors */ @@ -
> 764,17 +747,8 @@ ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf
> **tx_pkts,
> 
>  			/* nb_used better be <= txq->tx_rs_thresh */
>  			if (unlikely(nb_used > txq->tx_rs_thresh)) {
> -				PMD_TX_LOG(DEBUG,
> -					   "The number of descriptors needed
> to "
> -					   "transmit the packet exceeds the "
> -					   "RS bit threshold. This will impact "
> -					   "performance."
> -					   "nb_used=%4u nb_free=%4u "
> -					   "tx_rs_thresh=%4u. "
> -					   "(port=%d queue=%d)",
> -					   nb_used, txq->nb_tx_free,
> -					   txq->tx_rs_thresh,
> -					   txq->port_id, txq->queue_id);
> +				ixgbe_trace_tx_thresh(txq->port_id, txq-
> >queue_id,
> +						      nb_used, txq->nb_tx_free,
> txq->tx_rs_thresh);
>  				/*
>  				 * Loop here until there are enough TX
>  				 * descriptors or until the ring cannot be @@ -
> 918,10 +892,7 @@ ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf
> **tx_pkts,
> 
>  		/* Set RS bit only on threshold packets' last descriptor */
>  		if (txq->nb_tx_used >= txq->tx_rs_thresh) {
> -			PMD_TX_LOG(DEBUG,
> -				   "Setting RS bit on TXD id="
> -				   "%4u (port=%d queue=%d)",
> -				   tx_last, txq->port_id, txq->queue_id);
> +			ixgbe_trace_tx_rs(txq->port_id, txq->queue_id,
> tx_last);
> 
>  			cmd_type_len |= IXGBE_TXD_CMD_RS;
> 
> @@ -944,9 +915,7 @@ ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf
> **tx_pkts,
>  	/*
>  	 * Set the Transmit Descriptor Tail (TDT)
>  	 */
> -	PMD_TX_LOG(DEBUG, "port_id=%u queue_id=%u tx_tail=%u
> nb_tx=%u",
> -		   (unsigned) txq->port_id, (unsigned) txq->queue_id,
> -		   (unsigned) tx_id, (unsigned) nb_tx);
> +	ixgbe_trace_tx_tail(txq->port_id, txq->queue_id, tx_id, nb_tx);
>  	IXGBE_PCI_REG_WC_WRITE_RELAXED(txq->tdt_reg_addr, tx_id);
>  	txq->tx_tail = tx_id;
> 
> @@ -1717,9 +1686,7 @@ rx_recv_pkts(void *rx_queue, struct rte_mbuf
> **rx_pkts,
>  		if (ixgbe_rx_alloc_bufs(rxq, true) != 0) {
>  			int i, j;
> 
> -			PMD_RX_LOG(DEBUG, "RX mbuf alloc failed
> port_id=%u "
> -				   "queue_id=%u", (unsigned) rxq->port_id,
> -				   (unsigned) rxq->queue_id);
> +			ixgbe_trace_rx_mbuf_alloc_failed(rxq->port_id, rxq-
> >queue_id);
> 
>  			rte_eth_devices[rxq->port_id].data-
> >rx_mbuf_alloc_failed +=
>  				rxq->rx_free_thresh;
> @@ -1851,17 +1818,12 @@ ixgbe_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		 * to happen by sending specific "back-pressure" flow control
>  		 * frames to its peer(s).
>  		 */
> -		PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_id=%u "
> -			   "ext_err_stat=0x%08x pkt_len=%u",
> -			   (unsigned) rxq->port_id, (unsigned) rxq->queue_id,
> -			   (unsigned) rx_id, (unsigned) staterr,
> -			   (unsigned) rte_le_to_cpu_16(rxd.wb.upper.length));
> +		ixgbe_trace_rx(rxq->port_id, rxq->queue_id, rx_id,
> +			       staterr, rte_le_to_cpu_16(rxd.wb.upper.length));
> 
>  		nmb = rte_mbuf_raw_alloc(rxq->mb_pool);
>  		if (nmb == NULL) {
> -			PMD_RX_LOG(DEBUG, "RX mbuf alloc failed
> port_id=%u "
> -				   "queue_id=%u", (unsigned) rxq->port_id,
> -				   (unsigned) rxq->queue_id);
> +			ixgbe_trace_rx_mbuf_alloc_failed(rxq->port_id, rxq-
> >queue_id);
>  			rte_eth_devices[rxq->port_id].data-
> >rx_mbuf_alloc_failed++;
>  			break;
>  		}
> @@ -1959,11 +1921,9 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf
> **rx_pkts,
>  	 */
>  	nb_hold = (uint16_t) (nb_hold + rxq->nb_rx_hold);
>  	if (nb_hold > rxq->rx_free_thresh) {
> -		PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_tail=%u
> "
> -			   "nb_hold=%u nb_rx=%u",
> -			   (unsigned) rxq->port_id, (unsigned) rxq->queue_id,
> -			   (unsigned) rx_id, (unsigned) nb_hold,
> -			   (unsigned) nb_rx);
> +		ixgbe_trace_rx_post(rxq->port_id, rxq->queue_id,
> +				    rx_id, nb_hold, nb_rx);
> +
>  		rx_id = (uint16_t) ((rx_id == 0) ?
>  				     (rxq->nb_rx_desc - 1) : (rx_id - 1));
>  		IXGBE_PCI_REG_WC_WRITE(rxq->rdt_reg_addr, rx_id); @@ -
> 2124,17 +2084,13 @@ ixgbe_recv_pkts_lro(void *rx_queue, struct rte_mbuf
> **rx_pkts, uint16_t nb_pkts,
> 
>  		rxd = *rxdp;
> 
> -		PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_id=%u "
> -				  "staterr=0x%x data_len=%u",
> -			   rxq->port_id, rxq->queue_id, rx_id, staterr,
> -			   rte_le_to_cpu_16(rxd.wb.upper.length));
> +		ixgbe_trace_rx(rxq->port_id, rxq->queue_id, rx_id, staterr,
> +			       rte_le_to_cpu_16(rxd.wb.upper.length));
> 
>  		if (!bulk_alloc) {
>  			nmb = rte_mbuf_raw_alloc(rxq->mb_pool);
>  			if (nmb == NULL) {
> -				PMD_RX_LOG(DEBUG, "RX mbuf alloc failed "
> -						  "port_id=%u queue_id=%u",
> -					   rxq->port_id, rxq->queue_id);
> +				ixgbe_trace_rx_mbuf_alloc_failed(rxq-
> >port_id, rxq->queue_id);
> 
>  				rte_eth_devices[rxq->port_id].data->
> 
> 	rx_mbuf_alloc_failed++;
> @@ -2150,10 +2106,7 @@ ixgbe_recv_pkts_lro(void *rx_queue, struct
> rte_mbuf **rx_pkts, uint16_t nb_pkts,
>  							next_rdt);
>  				nb_hold -= rxq->rx_free_thresh;
>  			} else {
> -				PMD_RX_LOG(DEBUG, "RX bulk alloc failed "
> -						  "port_id=%u queue_id=%u",
> -					   rxq->port_id, rxq->queue_id);
> -
> +				ixgbe_trace_rx_mbuf_alloc_failed(rxq-
> >port_id, rxq->queue_id);
>  				rte_eth_devices[rxq->port_id].data->
> 
> 	rx_mbuf_alloc_failed++;
>  				break;
> @@ -2307,9 +2260,7 @@ ixgbe_recv_pkts_lro(void *rx_queue, struct
> rte_mbuf **rx_pkts, uint16_t nb_pkts,
>  	 * hardware point of view...
>  	 */
>  	if (!bulk_alloc && nb_hold > rxq->rx_free_thresh) {
> -		PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_tail=%u
> "
> -			   "nb_hold=%u nb_rx=%u",
> -			   rxq->port_id, rxq->queue_id, rx_id, nb_hold, nb_rx);
> +		ixgbe_trace_rx_post(rxq->port_id, rxq->queue_id, rx_id,
> nb_hold,
> +nb_rx);
> 
>  		rte_wmb();
>  		IXGBE_PCI_REG_WC_WRITE_RELAXED(rxq->rdt_reg_addr,
> prev_id); diff --git a/drivers/net/ixgbe/ixgbe_trace.h
> b/drivers/net/ixgbe/ixgbe_trace.h new file mode 100644 index
> 000000000000..f260edd6fe3a
> --- /dev/null
> +++ b/drivers/net/ixgbe/ixgbe_trace.h
> @@ -0,0 +1,110 @@
> +/* SPDX-License-Identifier: BSD-3-Clause */
> +
> +#ifndef _IXGBE_TRACE_H_
> +#define _IXGBE_TRACE_H_
> +
> +#include <rte_trace_point.h>
> +
> +RTE_TRACE_POINT(
> +	ixgbe_trace_rx_mbuf_alloc_failed,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(rx_queue_id);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_rx,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id,
> +			     uint16_t rx_id, uint32_t staterr, uint16_t len),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(rx_queue_id);
> +	rte_trace_point_emit_u16(rx_id);
> +	rte_trace_point_emit_u32(staterr);
> +	rte_trace_point_emit_u16(len);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_rx_post,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id,
> +			     uint16_t rx_id, uint16_t nb_hold, uint16_t nb_rx),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(rx_queue_id);
> +	rte_trace_point_emit_u16(rx_id);
> +	rte_trace_point_emit_u16(nb_hold);
> +	rte_trace_point_emit_u16(nb_rx);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_tx_done,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t nb_to_clean, uint16_t last_desc_cleaned,
> +			     uint16_t desc_to_clean),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(nb_to_clean);
> +	rte_trace_point_emit_u16(last_desc_cleaned);
> +	rte_trace_point_emit_u16(desc_to_clean);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_tx_not_done,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t desc_to_clean),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(desc_to_clean);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_tx,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t pktlen, uint16_t tx_first, uint16_t tx_last),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(pktlen);
> +	rte_trace_point_emit_u16(tx_first);
> +	rte_trace_point_emit_u16(tx_last);
> +);
> +
> +RTE_TRACE_POINT(
> +	ixgbe_trace_tx_full,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t nb_used, uint16_t nb_free),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(nb_used);
> +	rte_trace_point_emit_u16(nb_free);
> +);
> +
> +RTE_TRACE_POINT(
> +	ixgbe_trace_tx_thresh,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t nb_used, uint16_t nb_free,
> +			     uint16_t tx_rs_thresh),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(nb_used);
> +	rte_trace_point_emit_u16(nb_free);
> +	rte_trace_point_emit_u16(tx_rs_thresh);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_tx_rs,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t txd_id),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(txd_id);
> +);
> +
> +RTE_TRACE_POINT_FP(
> +	ixgbe_trace_tx_tail,
> +	RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,
> +			     uint16_t tx_tail, uint16_t nb_tx),
> +	rte_trace_point_emit_u16(port_id);
> +	rte_trace_point_emit_u16(tx_queue_id);
> +	rte_trace_point_emit_u16(tx_tail);
> +	rte_trace_point_emit_u16(nb_tx);
> +);
> +
> +#endif /* _IXGBE_LOGS_H_ */
> --
> 2.39.1
> 
> 


  reply	other threads:[~2023-03-03  2:16 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-21 20:42 longli
2023-02-23 14:07 ` Ferruh Yigit
2023-02-23 18:09   ` Stephen Hemminger
2023-02-24 17:51     ` Stephen Hemminger
2023-03-03  2:16       ` Long Li [this message]
2023-03-03 13:54         ` Ferruh Yigit
2023-03-03 19:04           ` Long Li
2023-03-04  1:15             ` Ferruh Yigit
2023-04-28  1:29               ` Long Li
2023-04-28 10:23                 ` Ferruh Yigit
2023-04-28 17:52                   ` Long Li
2023-03-04  0:16           ` Stephen Hemminger
2023-05-02 15:45 ` 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=PH7PR21MB326371786C14F5C10EDF51BCCEB39@PH7PR21MB3263.namprd21.prod.outlook.com \
    --to=longli@microsoft.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=bluca@debian.org \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@amd.com \
    --cc=jerinj@marvell.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --cc=longli@linuxonhyperv.com \
    --cc=olivier.matz@6wind.com \
    --cc=qi.z.zhang@intel.com \
    --cc=sharmaajay@microsoft.com \
    --cc=stable@dpdk.org \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /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).