Use the following command: 1. dpdk-testpmd -c 0x3 -n 4 --force-max-simd-bitwidth=64 -- -i --enable-rx-timestamp 2. port stop 0 3. port config 0 rx_offload timestamp off 4. port start 0 Then start it, log will show timestamp info, which should not appear. Because ice_timestamp_dynflag is still more than 0, code will still calculate timestamp. So fix it.
Fixes: f9c561ffbccc ("net/ice: fix performance for Rx timestamp") Cc: sta...@dpdk.org Signed-off-by: Wenjing Qiao <wenjing.q...@intel.com> --- drivers/net/ice/ice_rxtx.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c index d3a45ec609..cee5c3c554 100644 --- a/drivers/net/ice/ice_rxtx.c +++ b/drivers/net/ice/ice_rxtx.c @@ -1764,7 +1764,8 @@ ice_rx_scan_hw_ring(struct ice_rx_queue *rxq) ice_rxd_to_vlan_tci(mb, &rxdp[j]); rxd_to_pkt_fields_ops[rxq->rxdid](rxq, mb, &rxdp[j]); #ifndef RTE_LIBRTE_ICE_16BYTE_RX_DESC - if (ice_timestamp_dynflag > 0) { + if (ice_timestamp_dynflag > 0 && + (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) { rxq->time_high = rte_le_to_cpu_32(rxdp[j].wb.flex_ts.ts_high); if (unlikely(is_tsinit)) { @@ -2130,7 +2131,8 @@ ice_recv_scattered_pkts(void *rx_queue, rxd_to_pkt_fields_ops[rxq->rxdid](rxq, first_seg, &rxd); pkt_flags = ice_rxd_error_to_pkt_flags(rx_stat_err0); #ifndef RTE_LIBRTE_ICE_16BYTE_RX_DESC - if (ice_timestamp_dynflag > 0) { + if (ice_timestamp_dynflag > 0 && + (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) { rxq->time_high = rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high); if (unlikely(is_tsinit)) { @@ -2620,7 +2622,8 @@ ice_recv_pkts(void *rx_queue, rxd_to_pkt_fields_ops[rxq->rxdid](rxq, rxm, &rxd); pkt_flags = ice_rxd_error_to_pkt_flags(rx_stat_err0); #ifndef RTE_LIBRTE_ICE_16BYTE_RX_DESC - if (ice_timestamp_dynflag > 0) { + if (ice_timestamp_dynflag > 0 && + (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) { rxq->time_high = rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high); if (unlikely(is_tsinit)) { -- 2.25.1