[dpdk-dev] [PATCH v3 11/16] app/testpmd: switch Rx timestamp to dynamic mbuf field

Olivier Matz olivier.matz at 6wind.com
Tue Nov 3 11:23:04 CET 2020


On Tue, Nov 03, 2020 at 01:14:02AM +0100, Thomas Monjalon wrote:
> The mbuf timestamp is moved to a dynamic field
> in order to allow removal of the deprecated static field.
> The related mbuf flag is also replaced.
> 
> Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
> ---
>  app/test-pmd/util.c | 39 +++++++++++++++++++++++++++++++++++++--
>  1 file changed, 37 insertions(+), 2 deletions(-)
> 
> diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c
> index 781a813759..eebb5166ad 100644
> --- a/app/test-pmd/util.c
> +++ b/app/test-pmd/util.c
> @@ -5,6 +5,7 @@
>  
>  #include <stdio.h>
>  
> +#include <rte_bitops.h>
>  #include <rte_net.h>
>  #include <rte_mbuf.h>
>  #include <rte_ether.h>
> @@ -22,6 +23,40 @@ print_ether_addr(const char *what, const struct rte_ether_addr *eth_addr)
>  	printf("%s%s", what, buf);
>  }
>  
> +static inline bool
> +is_timestamp_enabled(const struct rte_mbuf *mbuf)
> +{
> +	static uint64_t timestamp_rx_dynflag;
> +
> +	int timestamp_rx_dynflag_offset;

unneeded blank line

> +
> +	if (timestamp_rx_dynflag == 0) {
> +		timestamp_rx_dynflag_offset = rte_mbuf_dynflag_lookup(
> +				RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME, NULL);
> +		if (timestamp_rx_dynflag_offset < 0)
> +			return false;
> +		timestamp_rx_dynflag = RTE_BIT64(timestamp_rx_dynflag_offset);
> +	}
> +
> +	return (mbuf->ol_flags & timestamp_rx_dynflag) != 0;
> +}
> +
> +static inline rte_mbuf_timestamp_t
> +get_timestamp(const struct rte_mbuf *mbuf)
> +{
> +	static int timestamp_dynfield_offset = -1;
> +
> +	if (timestamp_dynfield_offset < 0) {
> +		timestamp_dynfield_offset = rte_mbuf_dynfield_lookup(
> +				RTE_MBUF_DYNFIELD_TIMESTAMP_NAME, NULL);
> +		if (timestamp_dynfield_offset < 0)
> +			return 0;
> +	}
> +
> +	return *RTE_MBUF_DYNFIELD(mbuf,
> +			timestamp_dynfield_offset, rte_mbuf_timestamp_t *);
> +}
> +
>  static inline void
>  dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
>  	      uint16_t nb_pkts, int is_rx)
> @@ -107,8 +142,8 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
>  				printf("hash=0x%x ID=0x%x ",
>  				       mb->hash.fdir.hash, mb->hash.fdir.id);
>  		}
> -		if (ol_flags & PKT_RX_TIMESTAMP)
> -			printf(" - timestamp %"PRIu64" ", mb->timestamp);
> +		if (is_timestamp_enabled(mb))
> +			printf(" - timestamp %"PRIu64" ", get_timestamp(mb));
>  		if (ol_flags & PKT_RX_QINQ)
>  			printf(" - QinQ VLAN tci=0x%x, VLAN tci outer=0x%x",
>  			       mb->vlan_tci, mb->vlan_tci_outer);
> -- 
> 2.28.0
> 


More information about the dev mailing list