patch 'net/iavf: remove PHC polling from Rx datapath' has been queued to stable release 25.11.3
Kevin Traynor
ktraynor at redhat.com
Thu Jul 23 19:15:20 CEST 2026
Hi,
FYI, your patch has been queued to stable release 25.11.3
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/27/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable
This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/ddc5a0fd4e8fec92c954ccf8b0da7e08dc761b41
Thanks.
Kevin
---
>From ddc5a0fd4e8fec92c954ccf8b0da7e08dc761b41 Mon Sep 17 00:00:00 2001
From: Soumyadeep Hore <soumyadeep.hore at intel.com>
Date: Wed, 20 May 2026 14:43:50 -0400
Subject: [PATCH] net/iavf: remove PHC polling from Rx datapath
[ upstream commit 514e395e50e8435da199ec84425de8ed36486ebd ]
Remove periodic PHC read/update checks from scalar and vector flex
RX paths, keeping timestamp conversion based on queue PHC state.
With control-path PHC sync already in place, this avoids hot-path PHC
polling overhead while preserving RX timestamp correctness.
Bugzilla ID: 1898
Fixes: 61b6874b9224 ("net/iavf: support Rx timestamp offload on AVX512")
Fixes: 6ad2944f4e82 ("net/iavf: support Rx timestamp offload on AVX2")
Fixes: 33db16136e55 ("net/iavf: improve performance of Rx timestamp offload")
Signed-off-by: Soumyadeep Hore <soumyadeep.hore at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/intel/iavf/iavf_rxtx.c | 34 -------------------
drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c | 16 ++-------
drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c | 16 ++-------
3 files changed, 4 insertions(+), 62 deletions(-)
diff --git a/drivers/net/intel/iavf/iavf_rxtx.c b/drivers/net/intel/iavf/iavf_rxtx.c
index 5790180e89..fd940de03b 100644
--- a/drivers/net/intel/iavf/iavf_rxtx.c
+++ b/drivers/net/intel/iavf/iavf_rxtx.c
@@ -1511,14 +1511,4 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
ptype_tbl = rxq->iavf_vsi->adapter->ptype_tbl;
- if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
- uint64_t sw_cur_time = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
-
- if (sw_cur_time - rxq->hw_time_update > 4) {
- if (iavf_get_phc_time(rxq))
- PMD_DRV_LOG(ERR, "get physical time failed");
- rxq->hw_time_update = sw_cur_time;
- }
- }
-
while (nb_rx < nb_pkts) {
rxdp = &rx_ring[rx_id];
@@ -1589,5 +1579,4 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
rxq->phc_time = ts_ns;
- rxq->hw_time_update = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
*RTE_MBUF_DYNFIELD(rxm,
@@ -1631,14 +1620,4 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
const uint32_t *ptype_tbl = rxq->iavf_vsi->adapter->ptype_tbl;
- if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
- uint64_t sw_cur_time = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
-
- if (sw_cur_time - rxq->hw_time_update > 4) {
- if (iavf_get_phc_time(rxq))
- PMD_DRV_LOG(ERR, "get physical time failed");
- rxq->hw_time_update = sw_cur_time;
- }
- }
-
while (nb_rx < nb_pkts) {
rxdp = &rx_ring[rx_id];
@@ -1759,5 +1738,4 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
rxq->phc_time = ts_ns;
- rxq->hw_time_update = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
*RTE_MBUF_DYNFIELD(first_seg,
@@ -1973,14 +1951,4 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
return 0;
- if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
- uint64_t sw_cur_time = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
-
- if (sw_cur_time - rxq->hw_time_update > 4) {
- if (iavf_get_phc_time(rxq))
- PMD_DRV_LOG(ERR, "get physical time failed");
- rxq->hw_time_update = sw_cur_time;
- }
- }
-
/* Scan LOOK_AHEAD descriptors at a time to determine which
* descriptors reference packets that are ready to be received.
@@ -2045,6 +2013,4 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
rxq->phc_time = ts_ns;
- rxq->hw_time_update = rte_get_timer_cycles() /
- (rte_get_timer_hz() / 1000);
*RTE_MBUF_DYNFIELD(mb,
diff --git a/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c b/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c
index ca4494d548..b3e142ad35 100644
--- a/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c
+++ b/drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c
@@ -515,16 +515,8 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct ci_rx_queue *rxq,
rte_cpu_to_le_32(1 << IAVF_RX_FLEX_DESC_STATUS0_DD_S)))
return 0;
- bool is_tsinit = false;
uint8_t inflection_point = 0;
__m256i hw_low_last = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, rxq->phc_time);
if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
- uint64_t sw_cur_time = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
-
- if (unlikely(sw_cur_time - rxq->hw_time_update > 4)) {
- hw_low_last = _mm256_setzero_si256();
- is_tsinit = 1;
- } else {
- hw_low_last = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, rxq->phc_time);
- }
+ hw_low_last = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, rxq->phc_time);
}
@@ -1153,8 +1145,6 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct ci_rx_queue *rxq,
iavf_timestamp_dynfield_offset, uint32_t *) = _mm256_extract_epi32(ts_low1, 7);
- if (unlikely(is_tsinit)) {
+ {
uint32_t in_timestamp;
- if (iavf_get_phc_time(rxq))
- PMD_DRV_LOG(ERR, "get physical time failed");
in_timestamp = *RTE_MBUF_DYNFIELD(rx_pkts[i + 0],
iavf_timestamp_dynfield_offset, uint32_t *);
@@ -1389,6 +1379,4 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct ci_rx_queue *rxq,
break;
}
-
- rxq->hw_time_update = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
}
if (burst != IAVF_VPMD_DESCS_PER_LOOP_WIDE)
diff --git a/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c b/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c
index 096e056b8b..ac0ce2b1ee 100644
--- a/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c
+++ b/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c
@@ -616,16 +616,8 @@ _iavf_recv_raw_pkts_vec_avx512_flex_rxd(struct ci_rx_queue *rxq,
#ifdef IAVF_RX_TS_OFFLOAD
uint8_t inflection_point = 0;
- bool is_tsinit = false;
__m256i hw_low_last = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, (uint32_t)rxq->phc_time);
if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
- uint64_t sw_cur_time = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
-
- if (unlikely(sw_cur_time - rxq->hw_time_update > 4)) {
- hw_low_last = _mm256_setzero_si256();
- is_tsinit = 1;
- } else {
- hw_low_last = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, (uint32_t)rxq->phc_time);
- }
+ hw_low_last = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, (uint32_t)rxq->phc_time);
}
#endif
@@ -1344,9 +1336,7 @@ _iavf_recv_raw_pkts_vec_avx512_flex_rxd(struct ci_rx_queue *rxq,
iavf_timestamp_dynfield_offset, uint32_t *) = _mm256_extract_epi32(ts_low1, 7);
- if (unlikely(is_tsinit)) {
+ {
uint32_t in_timestamp;
- if (iavf_get_phc_time(rxq))
- PMD_DRV_LOG(ERR, "get physical time failed");
in_timestamp = *RTE_MBUF_DYNFIELD(rx_pkts[i + 0],
iavf_timestamp_dynfield_offset, uint32_t *);
@@ -1585,6 +1575,4 @@ _iavf_recv_raw_pkts_vec_avx512_flex_rxd(struct ci_rx_queue *rxq,
break;
}
-
- rxq->hw_time_update = rte_get_timer_cycles() / (rte_get_timer_hz() / 1000);
}
#endif
--
2.55.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-07-23 17:58:00.305501177 +0100
+++ 0057-net-iavf-remove-PHC-polling-from-Rx-datapath.patch 2026-07-23 17:57:58.673918570 +0100
@@ -1 +1 @@
-From 514e395e50e8435da199ec84425de8ed36486ebd Mon Sep 17 00:00:00 2001
+From ddc5a0fd4e8fec92c954ccf8b0da7e08dc761b41 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 514e395e50e8435da199ec84425de8ed36486ebd ]
+
@@ -16 +17,0 @@
-Cc: stable at dpdk.org
@@ -27 +28 @@
-index cdf615f7ad..decbc75142 100644
+index 5790180e89..fd940de03b 100644
@@ -30 +31 @@
-@@ -1508,14 +1508,4 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
+@@ -1511,14 +1511,4 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
@@ -45 +46 @@
-@@ -1586,5 +1576,4 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
+@@ -1589,5 +1579,4 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
@@ -51 +52 @@
-@@ -1628,14 +1617,4 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
+@@ -1631,14 +1620,4 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
@@ -66 +67 @@
-@@ -1756,5 +1735,4 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
+@@ -1759,5 +1738,4 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
@@ -72 +73 @@
-@@ -1970,14 +1948,4 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
+@@ -1973,14 +1951,4 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
@@ -87 +88 @@
-@@ -2042,6 +2010,4 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
+@@ -2045,6 +2013,4 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
@@ -95 +96 @@
-index aa60e71857..9341d8412f 100644
+index ca4494d548..b3e142ad35 100644
@@ -134 +135 @@
-index c9422971b7..83ba635062 100644
+index 096e056b8b..ac0ce2b1ee 100644
More information about the stable
mailing list