]> git.droids-corp.org - dpdk.git/commitdiff
net/ark: switch Rx timestamp to dynamic mbuf field
authorThomas Monjalon <thomas@monjalon.net>
Thu, 29 Oct 2020 02:26:41 +0000 (03:26 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 3 Nov 2020 15:21:15 +0000 (16:21 +0100)
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>
Acked-by: David Marchand <david.marchand@redhat.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
drivers/net/ark/ark_ethdev.c
drivers/net/ark/ark_ethdev_rx.c
drivers/net/ark/ark_ethdev_rx.h

index fa343999a1a9be95f108c8cecbc2af61dabf60aa..a658993512638fd675793c13277dd5707bbb4d5d 100644 (file)
@@ -79,6 +79,9 @@ 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,18 @@ static int
 eth_ark_dev_configure(struct rte_eth_dev *dev)
 {
        struct ark_adapter *ark = dev->data->dev_private;
+       int ret;
+
+       if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_TIMESTAMP) {
+               ret = rte_mbuf_dyn_rx_timestamp_register(
+                               &ark_timestamp_dynfield_offset,
+                               &ark_timestamp_rx_dynflag);
+               if (ret != 0) {
+                       ARK_PMD_LOG(ERR,
+                               "Failed to register Rx timestamp field/flag\n");
+                       return -rte_errno;
+               }
+       }
 
        eth_ark_dev_set_link_up(dev);
        if (ark->user_ext.dev_configure)
@@ -782,6 +797,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;
 }
 
index c24cc00e2f1bd60d8484687d563beb915101a636..d29d3db7835b0c6da29e54469eadb02356c15e5b 100644 (file)
@@ -272,7 +272,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 */
index 0fdd29b1ab0702bf330946cb7d728c622c1bf9cf..001fa9bdfa2ae6f16268d3f95dfd76292fe7a827 100644 (file)
@@ -11,6 +11,8 @@
 #include <rte_mempool.h>
 #include <rte_ethdev_driver.h>
 
+extern uint64_t ark_timestamp_rx_dynflag;
+extern int ark_timestamp_dynfield_offset;
 
 int eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev,
                               uint16_t queue_idx,