[v2,05/14] net/ark: switch timestamp to dynamic mbuf field

Message ID 20201101180626.2198868-6-thomas@monjalon.net (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series remove mbuf timestamp |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Thomas Monjalon Nov. 1, 2020, 6:06 p.m. UTC
  The mbuf timestamp is moved to a dynamic field
in order to allow removal of the deprecated static field.
The related dynamic mbuf flag is set, although was missing previously.

The timestamp is set if configured for at least one device.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 drivers/net/ark/ark_ethdev.c    | 23 +++++++++++++++++++++++
 drivers/net/ark/ark_ethdev_rx.c | 10 +++++++++-
 2 files changed, 32 insertions(+), 1 deletion(-)
  

Comments

Olivier Matz Nov. 2, 2020, 3:32 p.m. UTC | #1
On Sun, Nov 01, 2020 at 07:06:17PM +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 dynamic mbuf flag is set, although was missing previously.
> 
> The timestamp is set if configured for at least one device.
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
>  drivers/net/ark/ark_ethdev.c    | 23 +++++++++++++++++++++++
>  drivers/net/ark/ark_ethdev_rx.c | 10 +++++++++-
>  2 files changed, 32 insertions(+), 1 deletion(-)

<...>

> --- a/drivers/net/ark/ark_ethdev_rx.c
> +++ b/drivers/net/ark/ark_ethdev_rx.c
> @@ -15,6 +15,9 @@
>  #define ARK_RX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_RX_META_SIZE)
>  #define ARK_RX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM)
>  
> +extern uint64_t ark_timestamp_rx_dynflag;
> +extern int ark_timestamp_dynfield_offset;
> +

Wouldn't it be better in a .h ?
Maybe ark_ethdev_rx.h

>  /* Forward declarations */
>  struct ark_rx_queue;
>  struct ark_rx_meta;
> @@ -272,7 +275,12 @@ eth_ark_recv_pkts(void *rx_queue,
>  		mbuf->port = meta->port;
>  		mbuf->pkt_len = meta->pkt_len;
>  		mbuf->data_len = meta->pkt_len;
> -		mbuf->timestamp = meta->timestamp;
> +		/* set timestamp if enabled at least on one device */
> +		if (ark_timestamp_rx_dynflag > 0) {
> +			*RTE_MBUF_DYNFIELD(mbuf, ark_timestamp_dynfield_offset,
> +				rte_mbuf_timestamp_t *) = meta->timestamp;
> +			mbuf->ol_flags |= ark_timestamp_rx_dynflag;
> +		}
>  		rte_pmd_ark_mbuf_rx_userdata_set(mbuf, meta->user_data);
>  
>  		if (ARK_DEBUG_CORE) {	/* debug sanity checks */
> -- 
> 2.28.0
>
  
Thomas Monjalon Nov. 2, 2020, 4:10 p.m. UTC | #2
02/11/2020 16:32, Olivier Matz:
> On Sun, Nov 01, 2020 at 07:06:17PM +0100, Thomas Monjalon wrote:
> > --- a/drivers/net/ark/ark_ethdev_rx.c
> > +++ b/drivers/net/ark/ark_ethdev_rx.c
> > @@ -15,6 +15,9 @@
> >  #define ARK_RX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_RX_META_SIZE)
> >  #define ARK_RX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM)
> >  
> > +extern uint64_t ark_timestamp_rx_dynflag;
> > +extern int ark_timestamp_dynfield_offset;
> > +
> 
> Wouldn't it be better in a .h ?
> Maybe ark_ethdev_rx.h

Yes it would allow type checking on compilation.
  

Patch

diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
index fa343999a1..629f825019 100644
--- a/drivers/net/ark/ark_ethdev.c
+++ b/drivers/net/ark/ark_ethdev.c
@@ -9,6 +9,7 @@ 
 #include <rte_bus_pci.h>
 #include <rte_ethdev_pci.h>
 #include <rte_kvargs.h>
+#include <rte_bitops.h>
 
 #include "rte_pmd_ark.h"
 #include "ark_global.h"
@@ -79,6 +80,8 @@  static int  eth_ark_set_mtu(struct rte_eth_dev *dev, uint16_t size);
 #define ARK_TX_MAX_QUEUE (4096 * 4)
 #define ARK_TX_MIN_QUEUE (256)
 
+uint64_t ark_timestamp_rx_dynflag;
+int ark_timestamp_dynfield_offset = -1;
 int rte_pmd_ark_rx_userdata_dynfield_offset = -1;
 int rte_pmd_ark_tx_userdata_dynfield_offset = -1;
 
@@ -552,6 +555,24 @@  static int
 eth_ark_dev_configure(struct rte_eth_dev *dev)
 {
 	struct ark_adapter *ark = dev->data->dev_private;
+	int ark_timestamp_rx_dynflag_offset;
+
+	if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_TIMESTAMP) {
+		ark_timestamp_dynfield_offset = rte_mbuf_dynfield_lookup(
+				RTE_MBUF_DYNFIELD_TIMESTAMP_NAME, NULL);
+		if (ark_timestamp_dynfield_offset < 0) {
+			ARK_PMD_LOG(ERR, "Failed to lookup timestamp field\n");
+			return -rte_errno;
+		}
+		ark_timestamp_rx_dynflag_offset = rte_mbuf_dynflag_lookup(
+				RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME, NULL);
+		if (ark_timestamp_rx_dynflag_offset < 0) {
+			ARK_PMD_LOG(ERR, "Failed to lookup Rx timestamp flag\n");
+			return -rte_errno;
+		}
+		ark_timestamp_rx_dynflag =
+				RTE_BIT64(ark_timestamp_rx_dynflag_offset);
+	}
 
 	eth_ark_dev_set_link_up(dev);
 	if (ark->user_ext.dev_configure)
@@ -782,6 +803,8 @@  eth_ark_dev_info_get(struct rte_eth_dev *dev,
 				ETH_LINK_SPEED_50G |
 				ETH_LINK_SPEED_100G);
 
+	dev_info->rx_offload_capa = DEV_RX_OFFLOAD_TIMESTAMP;
+
 	return 0;
 }
 
diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c
index c24cc00e2f..e45adf959d 100644
--- a/drivers/net/ark/ark_ethdev_rx.c
+++ b/drivers/net/ark/ark_ethdev_rx.c
@@ -15,6 +15,9 @@ 
 #define ARK_RX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_RX_META_SIZE)
 #define ARK_RX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM)
 
+extern uint64_t ark_timestamp_rx_dynflag;
+extern int ark_timestamp_dynfield_offset;
+
 /* Forward declarations */
 struct ark_rx_queue;
 struct ark_rx_meta;
@@ -272,7 +275,12 @@  eth_ark_recv_pkts(void *rx_queue,
 		mbuf->port = meta->port;
 		mbuf->pkt_len = meta->pkt_len;
 		mbuf->data_len = meta->pkt_len;
-		mbuf->timestamp = meta->timestamp;
+		/* set timestamp if enabled at least on one device */
+		if (ark_timestamp_rx_dynflag > 0) {
+			*RTE_MBUF_DYNFIELD(mbuf, ark_timestamp_dynfield_offset,
+				rte_mbuf_timestamp_t *) = meta->timestamp;
+			mbuf->ol_flags |= ark_timestamp_rx_dynflag;
+		}
 		rte_pmd_ark_mbuf_rx_userdata_set(mbuf, meta->user_data);
 
 		if (ARK_DEBUG_CORE) {	/* debug sanity checks */