[dpdk-test-report] |WARNING| pw99696 [PATCH] [v4] net/ice: enable Rx timestamp on Flex Descriptor

dpdklab at iol.unh.edu dpdklab at iol.unh.edu
Wed Oct 6 07:44:08 CEST 2021


Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/99696

_apply patch failure_

Submitter: Simei Su <simei.su at intel.com>
Date: Sunday, September 26 2021 14:04:45 
Applied on: CommitID:2700326085033fd13339a8de31f58a95d1ee9c3f
Apply patch set 99696 failed:

Checking patch doc/guides/rel_notes/release_21_11.rst...
error: while searching for:

  * Added 1PPS out support by a devargs.
  * Added IPv4 and L4(TCP/UDP/SCTP) checksum hash support in RSS flow.

* **Updated Marvell cnxk ethdev driver.**


error: patch failed: doc/guides/rel_notes/release_21_11.rst:81
Checking patch drivers/net/ice/ice_ethdev.c...
error: while searching for:
#define ICE_ONE_PPS_OUT_ARG       "pps_out"
#define ICE_RX_LOW_LATENCY_ARG    "rx_low_latency"

static const char * const ice_valid_args[] = {
	ICE_SAFE_MODE_SUPPORT_ARG,
	ICE_PIPELINE_MODE_SUPPORT_ARG,

error: patch failed: drivers/net/ice/ice_ethdev.c:32
error: while searching for:
			DEV_RX_OFFLOAD_QINQ_STRIP |
			DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
			DEV_RX_OFFLOAD_VLAN_EXTEND |
			DEV_RX_OFFLOAD_RSS_HASH;
		dev_info->tx_offload_capa |=
			DEV_TX_OFFLOAD_QINQ_INSERT |
			DEV_TX_OFFLOAD_IPV4_CKSUM |

error: patch failed: drivers/net/ice/ice_ethdev.c:3671
Checking patch drivers/net/ice/ice_rxtx.c...
Hunk #1 succeeded at 315 (offset 13 lines).
Hunk #2 succeeded at 794 (offset 428 lines).
error: while searching for:
	int32_t i, j, nb_rx = 0;
	uint64_t pkt_flags = 0;
	uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;

	rxdp = &rxq->rx_ring[rxq->rx_tail];
	rxep = &rxq->sw_ring[rxq->rx_tail];

error: patch failed: drivers/net/ice/ice_rxtx.c:1546
error: while searching for:
			ice_rxd_to_vlan_tci(mb, &rxdp[j]);
			rxq->rxd_to_pkt_fields(rxq, mb, &rxdp[j]);

			mb->ol_flags |= pkt_flags;
		}


error: patch failed: drivers/net/ice/ice_rxtx.c:1589
error: while searching for:
	uint64_t dma_addr;
	uint64_t pkt_flags;
	uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;

	while (nb_rx < nb_pkts) {
		rxdp = &rx_ring[rx_id];

error: patch failed: drivers/net/ice/ice_rxtx.c:1772
error: while searching for:
		ice_rxd_to_vlan_tci(first_seg, &rxd);
		rxq->rxd_to_pkt_fields(rxq, first_seg, &rxd);
		pkt_flags = ice_rxd_error_to_pkt_flags(rx_stat_err0);
		first_seg->ol_flags |= pkt_flags;
		/* Prefetch data of first segment, if configured to do so. */
		rte_prefetch0(RTE_PTR_ADD(first_seg->buf_addr,

error: patch failed: drivers/net/ice/ice_rxtx.c:1882
error: while searching for:
	uint64_t dma_addr;
	uint64_t pkt_flags;
	uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;

	while (nb_rx < nb_pkts) {
		rxdp = &rx_ring[rx_id];

error: patch failed: drivers/net/ice/ice_rxtx.c:2237
error: while searching for:
		ice_rxd_to_vlan_tci(rxm, &rxd);
		rxq->rxd_to_pkt_fields(rxq, rxm, &rxd);
		pkt_flags = ice_rxd_error_to_pkt_flags(rx_stat_err0);
		rxm->ol_flags |= pkt_flags;
		/* copy old mbuf to rx_pkts */
		rx_pkts[nb_rx++] = rxm;

error: patch failed: drivers/net/ice/ice_rxtx.c:2288
Checking patch drivers/net/ice/ice_rxtx.h...
error: while searching for:

#define ICE_RXDID_COMMS_OVS	22

typedef void (*ice_rx_release_mbufs_t)(struct ice_rx_queue *rxq);
typedef void (*ice_tx_release_mbufs_t)(struct ice_tx_queue *txq);
typedef void (*ice_rxd_to_pkt_fields_t)(struct ice_rx_queue *rxq,

error: patch failed: drivers/net/ice/ice_rxtx.h:40
error: while searching for:
	}
}

#endif /* _ICE_RXTX_H_ */

error: patch failed: drivers/net/ice/ice_rxtx.h:311
Checking patch drivers/net/ice/ice_rxtx_vec_common.h...
error: while searching for:
	if (rxq->proto_xtr != PROTO_XTR_NONE)
		return -1;

	if (rxq->offloads & ICE_RX_VECTOR_OFFLOAD)
		return ICE_VECTOR_OFFLOAD_PATH;


error: patch failed: drivers/net/ice/ice_rxtx_vec_common.h:287
Applying patch doc/guides/rel_notes/release_21_11.rst with 1 reject...
Rejected hunk #1.
Applying patch drivers/net/ice/ice_ethdev.c with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applying patch drivers/net/ice/ice_rxtx.c with 6 rejects...
Hunk #1 applied cleanly.
Hunk #2 applied cleanly.
Rejected hunk #3.
Rejected hunk #4.
Rejected hunk #5.
Rejected hunk #6.
Rejected hunk #7.
Rejected hunk #8.
Applying patch drivers/net/ice/ice_rxtx.h with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
Applying patch drivers/net/ice/ice_rxtx_vec_common.h with 1 reject...
Rejected hunk #1.
diff a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst	(rejected hunks)
@@ -81,6 +81,7 @@ New Features
 
   * Added 1PPS out support by a devargs.
   * Added IPv4 and L4(TCP/UDP/SCTP) checksum hash support in RSS flow.
+  * Added DEV_RX_OFFLOAD_TIMESTAMP support.
 
 * **Updated Marvell cnxk ethdev driver.**
 
diff a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c	(rejected hunks)
@@ -32,6 +32,9 @@
 #define ICE_ONE_PPS_OUT_ARG       "pps_out"
 #define ICE_RX_LOW_LATENCY_ARG    "rx_low_latency"
 
+uint64_t ice_timestamp_dynflag;
+int ice_timestamp_dynfield_offset = -1;
+
 static const char * const ice_valid_args[] = {
 	ICE_SAFE_MODE_SUPPORT_ARG,
 	ICE_PIPELINE_MODE_SUPPORT_ARG,
@@ -3671,7 +3674,8 @@ ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 			DEV_RX_OFFLOAD_QINQ_STRIP |
 			DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
 			DEV_RX_OFFLOAD_VLAN_EXTEND |
-			DEV_RX_OFFLOAD_RSS_HASH;
+			DEV_RX_OFFLOAD_RSS_HASH |
+			DEV_RX_OFFLOAD_TIMESTAMP;
 		dev_info->tx_offload_capa |=
 			DEV_TX_OFFLOAD_QINQ_INSERT |
 			DEV_TX_OFFLOAD_IPV4_CKSUM |
diff a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c	(rejected hunks)
@@ -1546,6 +1561,9 @@ ice_rx_scan_hw_ring(struct ice_rx_queue *rxq)
 	int32_t i, j, nb_rx = 0;
 	uint64_t pkt_flags = 0;
 	uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
+	struct ice_vsi *vsi = rxq->vsi;
+	struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
+	uint64_t ts_ns;
 
 	rxdp = &rxq->rx_ring[rxq->rx_tail];
 	rxep = &rxq->sw_ring[rxq->rx_tail];
@@ -1589,6 +1607,17 @@ ice_rx_scan_hw_ring(struct ice_rx_queue *rxq)
 			ice_rxd_to_vlan_tci(mb, &rxdp[j]);
 			rxq->rxd_to_pkt_fields(rxq, mb, &rxdp[j]);
 
+			if (rxq->offloads & DEV_RX_OFFLOAD_TIMESTAMP) {
+				ts_ns = ice_tstamp_convert_32b_64b(hw,
+					rte_le_to_cpu_32(rxdp[j].wb.flex_ts.ts_high));
+				if (ice_timestamp_dynflag > 0) {
+					*RTE_MBUF_DYNFIELD(mb,
+						ice_timestamp_dynfield_offset,
+						rte_mbuf_timestamp_t *) = ts_ns;
+					mb->ol_flags |= ice_timestamp_dynflag;
+				}
+			}
+
 			mb->ol_flags |= pkt_flags;
 		}
 
@@ -1772,6 +1801,9 @@ ice_recv_scattered_pkts(void *rx_queue,
 	uint64_t dma_addr;
 	uint64_t pkt_flags;
 	uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
+	struct ice_vsi *vsi = rxq->vsi;
+	struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
+	uint64_t ts_ns;
 
 	while (nb_rx < nb_pkts) {
 		rxdp = &rx_ring[rx_id];
@@ -1882,6 +1914,18 @@ ice_recv_scattered_pkts(void *rx_queue,
 		ice_rxd_to_vlan_tci(first_seg, &rxd);
 		rxq->rxd_to_pkt_fields(rxq, first_seg, &rxd);
 		pkt_flags = ice_rxd_error_to_pkt_flags(rx_stat_err0);
+
+		if (rxq->offloads & DEV_RX_OFFLOAD_TIMESTAMP) {
+			ts_ns = ice_tstamp_convert_32b_64b(hw,
+				rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high));
+			if (ice_timestamp_dynflag > 0) {
+				*RTE_MBUF_DYNFIELD(first_seg,
+					ice_timestamp_dynfield_offset,
+					rte_mbuf_timestamp_t *) = ts_ns;
+				first_seg->ol_flags |= ice_timestamp_dynflag;
+			}
+		}
+
 		first_seg->ol_flags |= pkt_flags;
 		/* Prefetch data of first segment, if configured to do so. */
 		rte_prefetch0(RTE_PTR_ADD(first_seg->buf_addr,
@@ -2237,6 +2281,9 @@ ice_recv_pkts(void *rx_queue,
 	uint64_t dma_addr;
 	uint64_t pkt_flags;
 	uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl;
+	struct ice_vsi *vsi = rxq->vsi;
+	struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
+	uint64_t ts_ns;
 
 	while (nb_rx < nb_pkts) {
 		rxdp = &rx_ring[rx_id];
@@ -2288,6 +2335,18 @@ ice_recv_pkts(void *rx_queue,
 		ice_rxd_to_vlan_tci(rxm, &rxd);
 		rxq->rxd_to_pkt_fields(rxq, rxm, &rxd);
 		pkt_flags = ice_rxd_error_to_pkt_flags(rx_stat_err0);
+
+		if (rxq->offloads & DEV_RX_OFFLOAD_TIMESTAMP) {
+			ts_ns = ice_tstamp_convert_32b_64b(hw,
+				rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high));
+			if (ice_timestamp_dynflag > 0) {
+				*RTE_MBUF_DYNFIELD(rxm,
+					ice_timestamp_dynfield_offset,
+					rte_mbuf_timestamp_t *) = ts_ns;
+				rxm->ol_flags |= ice_timestamp_dynflag;
+			}
+		}
+
 		rxm->ol_flags |= pkt_flags;
 		/* copy old mbuf to rx_pkts */
 		rx_pkts[nb_rx++] = rxm;
diff a/drivers/net/ice/ice_rxtx.h b/drivers/net/ice/ice_rxtx.h	(rejected hunks)
@@ -40,6 +40,9 @@
 
 #define ICE_RXDID_COMMS_OVS	22
 
+extern uint64_t ice_timestamp_dynflag;
+extern int ice_timestamp_dynfield_offset;
+
 typedef void (*ice_rx_release_mbufs_t)(struct ice_rx_queue *rxq);
 typedef void (*ice_tx_release_mbufs_t)(struct ice_tx_queue *txq);
 typedef void (*ice_rxd_to_pkt_fields_t)(struct ice_rx_queue *rxq,
@@ -311,4 +314,34 @@ void ice_fdir_rx_parsing_enable(struct ice_adapter *ad, bool on)
 	}
 }
 
+/* Helper function to convert a 32b nanoseconds timestamp to 64b. */
+static inline
+uint64_t ice_tstamp_convert_32b_64b(struct ice_hw *hw, uint32_t in_timestamp)
+{
+	const uint64_t mask = 0xFFFFFFFF;
+	uint32_t hi, lo, lo2, delta;
+	uint64_t time, ns;
+
+	lo = ICE_READ_REG(hw, GLTSYN_TIME_L(0));
+	hi = ICE_READ_REG(hw, GLTSYN_TIME_H(0));
+	lo2 = ICE_READ_REG(hw, GLTSYN_TIME_L(0));
+
+	if (lo2 < lo) {
+		lo = ICE_READ_REG(hw, GLTSYN_TIME_L(0));
+		hi = ICE_READ_REG(hw, GLTSYN_TIME_H(0));
+	}
+
+	time = ((uint64_t)hi << 32) | lo;
+
+	delta = (in_timestamp - (uint32_t)(time & mask));
+	if (delta > (mask / 2)) {
+		delta = ((uint32_t)(time & mask) - in_timestamp);
+		ns = time - delta;
+	} else {
+		ns = time + delta;
+	}
+
+	return ns;
+}
+
 #endif /* _ICE_RXTX_H_ */
diff a/drivers/net/ice/ice_rxtx_vec_common.h b/drivers/net/ice/ice_rxtx_vec_common.h	(rejected hunks)
@@ -287,6 +287,9 @@ ice_rx_vec_queue_default(struct ice_rx_queue *rxq)
 	if (rxq->proto_xtr != PROTO_XTR_NONE)
 		return -1;
 
+	if (rxq->offloads & DEV_RX_OFFLOAD_TIMESTAMP)
+		return -1;
+
 	if (rxq->offloads & ICE_RX_VECTOR_OFFLOAD)
 		return ICE_VECTOR_OFFLOAD_PATH;
 

https://lab.dpdk.org/results/dashboard/patchsets/18970/

UNH-IOL DPDK Community Lab


More information about the test-report mailing list