[PATCH 2/4] net/bnxt: pass Rx timestamp in mbuf
Mohammad Shuab Siddique
mohammad-shuab.siddique at broadcom.com
Mon Mar 2 18:12:34 CET 2026
From: Ajit Khaparde <ajit.khaparde at broadcom.com>
Pass Rx timestamp value in the mbuf using dynaflag.
Add ptp_cfg NULL checks to avoid segfault when ptp_cfg is not created.
Cc: stable at dpdk.org
Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
Signed-off-by: Mohammad Shuab Siddique <mohammad-shuab.siddique at broadcom.com>
---
drivers/net/bnxt/bnxt.h | 4 ++++
drivers/net/bnxt/bnxt_ethdev.c | 9 +++++++++
drivers/net/bnxt/bnxt_rxr.c | 21 +++++++++++++++++----
drivers/net/bnxt/bnxt_rxr.h | 7 +++++++
4 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 83ae151066..92ba475198 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -403,6 +403,10 @@ struct bnxt_ptp_cfg {
/* On P5, the Rx timestamp is present in the Rx completion record */
uint64_t rx_timestamp;
+ /* Dynamic mbuf field for passing Rx timestamp. */
+ int mb_rx_timestamp_offset;
+ /* Dynamic mbuf flag for indicating Rx timestamp. */
+ uint64_t mb_rx_timestamp_flag;
uint64_t current_time;
uint64_t old_time;
rte_spinlock_t ptp_lock;
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 3c618c6e82..c75cd05d99 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1686,6 +1686,7 @@ static void bnxt_ptp_stop(struct bnxt *bp)
static int bnxt_ptp_start(struct bnxt *bp)
{
+ struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
int rc;
rc = bnxt_schedule_ptp_alarm(bp);
@@ -1694,6 +1695,14 @@ static int bnxt_ptp_start(struct bnxt *bp)
} else {
bp->flags2 |= BNXT_FLAGS2_PTP_TIMESYNC_ENABLED;
bp->flags2 |= BNXT_FLAGS2_PTP_ALARM_SCHEDULED;
+
+ /* extra mbuf field to store timestamp information */
+ if (rte_mbuf_dyn_rx_timestamp_register(&ptp->mb_rx_timestamp_offset,
+ &ptp->mb_rx_timestamp_flag) != 0) {
+ PMD_DRV_LOG_LINE(ERR,
+ "Failed to register mbuf field for Rx timestamp");
+ return -rte_errno;
+ }
}
return rc;
diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index ac4c61b850..0ccf47cf35 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -1190,19 +1190,32 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,
mbuf->data_len = mbuf->pkt_len;
mbuf->port = rxq->port_id;
- if (unlikely((rte_le_to_cpu_16(rxcmp->flags_type) &
+ if (unlikely(((rte_le_to_cpu_16(rxcmp->flags_type) &
RX_PKT_CMPL_FLAGS_MASK) ==
RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP) ||
- bp->ptp_all_rx_tstamp)
+ bp->ptp_all_rx_tstamp) && bp->ieee_1588 &&
+ bp->ptp_cfg) {
+ mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP |
+ RTE_MBUF_F_RX_IEEE1588_TMST;
bnxt_get_rx_ts_p5(rxq->bp, rxcmp1->reorder);
-
+#ifndef RTE_IOVA_IN_MBUF
+ bnxt_timestamp_dynfield_set(mbuf,
+ bp->ptp_cfg->mb_rx_timestamp_offset,
+ bp->ptp_cfg->rx_timestamp);
+ mbuf->ol_flags |= bp->ptp_cfg->mb_rx_timestamp_flag;
+#endif
+ }
if (cmp_type == CMPL_BASE_TYPE_RX_L2_V3) {
bnxt_parse_csum_v3(mbuf, rxcmp1);
bnxt_parse_pkt_type_v3(mbuf, rxcmp, rxcmp1);
bnxt_rx_vlan_v3(mbuf, rxcmp, rxcmp1);
/* Packet cannot be a PTP ethertype if it is detected as L4 */
- if (mbuf->ol_flags & RTE_MBUF_F_RX_L4_CKSUM_GOOD)
+ if (mbuf->ol_flags & RTE_MBUF_F_RX_L4_CKSUM_GOOD) {
mbuf->ol_flags &= ~RTE_MBUF_F_RX_IEEE1588_PTP;
+ if (unlikely(bp->ptp_cfg))
+ mbuf->ol_flags &=
+ ~bp->ptp_cfg->mb_rx_timestamp_flag;
+ }
/* If its a PTP frame, ptype cannot be L2_ETHER */
if (mbuf->ol_flags & RTE_MBUF_F_RX_IEEE1588_PTP)
diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h
index 5e5496964f..0b7649193f 100644
--- a/drivers/net/bnxt/bnxt_rxr.h
+++ b/drivers/net/bnxt/bnxt_rxr.h
@@ -181,6 +181,13 @@ bnxt_cfa_code_dynfield(struct rte_mbuf *mbuf)
bnxt_cfa_code_dynfield_offset, bnxt_cfa_code_dynfield_t *);
}
+static __rte_always_inline void
+bnxt_timestamp_dynfield_set(struct rte_mbuf *mbuf, int offset,
+ rte_mbuf_timestamp_t ts)
+{
+ *RTE_MBUF_DYNFIELD(mbuf, offset, rte_mbuf_timestamp_t *) = ts;
+}
+
#define BNXT_RX_META_CFA_CODE_SHIFT 19
#define BNXT_CFA_CODE_META_SHIFT 16
#define BNXT_RX_META_CFA_CODE_INT_ACT_REC_BIT 0x8000000
--
2.47.3
More information about the dev
mailing list