Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/99696 _apply patch failure_ Submitter: Simei Su 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