* [PATCH] net/ice: Localize dynamic mbuf timestamp data
@ 2025-05-06 17:50 Jake Freeland
0 siblings, 0 replies; only message in thread
From: Jake Freeland @ 2025-05-06 17:50 UTC (permalink / raw)
To: Bruce Richardson, Anatoly Burakov; +Cc: Jake Freeland, dev
The ice_timestamp_dynfield_offset and ice_timestamp_dynflag global
variables are used to access the dynamic mbuf timestamp field when
timestamp offloading is enabled.
Move these into the ice_rx_queue structure, located in shared
rte_eth_dev_data, so they can be accessed by secondary processes.
Signed-off-by: Jake Freeland <jfree@FreeBSD.org>
---
drivers/net/intel/ice/ice_ethdev.c | 13 -------------
drivers/net/intel/ice/ice_rxtx.c | 27 +++++++++++++--------------
drivers/net/intel/ice/ice_rxtx.h | 6 ++----
3 files changed, 15 insertions(+), 31 deletions(-)
diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
index 21d3795954..2ec7eab7fa 100644
--- a/drivers/net/intel/ice/ice_ethdev.c
+++ b/drivers/net/intel/ice/ice_ethdev.c
@@ -44,9 +44,6 @@
#define ICE_CYCLECOUNTER_MASK 0xffffffffffffffffULL
-uint64_t ice_timestamp_dynflag;
-int ice_timestamp_dynfield_offset = -1;
-
static const char * const ice_valid_args[] = {
ICE_SAFE_MODE_SUPPORT_ARG,
ICE_PROTO_XTR_ARG,
@@ -3977,16 +3974,6 @@ ice_dev_start(struct rte_eth_dev *dev)
}
}
- if (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
- /* Register mbuf field and flag for Rx timestamp */
- ret = rte_mbuf_dyn_rx_timestamp_register(&ice_timestamp_dynfield_offset,
- &ice_timestamp_dynflag);
- if (ret) {
- PMD_DRV_LOG(ERR, "Cannot register mbuf field/flag for timestamp");
- goto tx_err;
- }
- }
-
/* program Rx queues' context in hardware*/
for (nb_rxq = 0; nb_rxq < data->nb_rx_queues; nb_rxq++) {
ret = ice_rx_queue_start(dev, nb_rxq);
diff --git a/drivers/net/intel/ice/ice_rxtx.c b/drivers/net/intel/ice/ice_rxtx.c
index 40ac01e782..ba1435b9de 100644
--- a/drivers/net/intel/ice/ice_rxtx.c
+++ b/drivers/net/intel/ice/ice_rxtx.c
@@ -275,17 +275,16 @@ ice_program_hw_rx_queue(struct ice_rx_queue *rxq)
return -EINVAL;
}
- if (!rxq->ts_enable && (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) {
+ if (rxq->ts_flag == 0 && (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) {
/* Register mbuf field and flag for Rx timestamp */
err = rte_mbuf_dyn_rx_timestamp_register(
- &ice_timestamp_dynfield_offset,
- &ice_timestamp_dynflag);
+ &rxq->ts_offset,
+ &rxq->ts_flag);
if (err) {
PMD_DRV_LOG(ERR,
"Cannot register mbuf field/flag for timestamp");
return -EINVAL;
}
- rxq->ts_enable = true;
}
memset(&rx_ctx, 0, sizeof(rx_ctx));
@@ -679,7 +678,7 @@ ice_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)
return 0;
if (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)
- rxq->ts_enable = true;
+ rxq->offloads |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
err = ice_program_hw_rx_queue(rxq);
if (err) {
PMD_DRV_LOG(ERR, "fail to program RX queue %u",
@@ -1785,7 +1784,7 @@ 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 (rxq->ts_flag > 0 &&
(rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) {
rxq->time_high =
rte_le_to_cpu_32(rxdp[j].wb.flex_ts.ts_high);
@@ -1804,9 +1803,9 @@ ice_rx_scan_hw_ring(struct ice_rx_queue *rxq)
rxq->hw_time_update = rte_get_timer_cycles() /
(rte_get_timer_hz() / 1000);
*RTE_MBUF_DYNFIELD(mb,
- ice_timestamp_dynfield_offset,
+ rxq->ts_offset,
rte_mbuf_timestamp_t *) = ts_ns;
- pkt_flags |= ice_timestamp_dynflag;
+ pkt_flags |= rxq->ts_flag;
}
if (ad->ptp_ena && ((mb->packet_type &
@@ -2153,7 +2152,7 @@ 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 (rxq->ts_flag > 0 &&
(rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) {
rxq->time_high =
rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high);
@@ -2171,9 +2170,9 @@ ice_recv_scattered_pkts(void *rx_queue,
rxq->hw_time_update = rte_get_timer_cycles() /
(rte_get_timer_hz() / 1000);
*RTE_MBUF_DYNFIELD(first_seg,
- (ice_timestamp_dynfield_offset),
+ (rxq->ts_offset),
rte_mbuf_timestamp_t *) = ts_ns;
- pkt_flags |= ice_timestamp_dynflag;
+ pkt_flags |= rxq->ts_flag;
}
if (ad->ptp_ena && ((first_seg->packet_type & RTE_PTYPE_L2_MASK)
@@ -2651,7 +2650,7 @@ 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 (rxq->ts_flag > 0 &&
(rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)) {
rxq->time_high =
rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high);
@@ -2669,9 +2668,9 @@ ice_recv_pkts(void *rx_queue,
rxq->hw_time_update = rte_get_timer_cycles() /
(rte_get_timer_hz() / 1000);
*RTE_MBUF_DYNFIELD(rxm,
- (ice_timestamp_dynfield_offset),
+ (rxq->ts_offset),
rte_mbuf_timestamp_t *) = ts_ns;
- pkt_flags |= ice_timestamp_dynflag;
+ pkt_flags |= rxq->ts_flag;
}
if (ad->ptp_ena && ((rxm->packet_type & RTE_PTYPE_L2_MASK) ==
diff --git a/drivers/net/intel/ice/ice_rxtx.h b/drivers/net/intel/ice/ice_rxtx.h
index 276d40b57f..500d630679 100644
--- a/drivers/net/intel/ice/ice_rxtx.h
+++ b/drivers/net/intel/ice/ice_rxtx.h
@@ -65,9 +65,6 @@
#define ICE_TX_OFFLOAD_NOTSUP_MASK \
(RTE_MBUF_F_TX_OFFLOAD_MASK ^ ICE_TX_OFFLOAD_MASK)
-extern uint64_t ice_timestamp_dynflag;
-extern int ice_timestamp_dynfield_offset;
-
/* Max header size can be 2K - 64 bytes */
#define ICE_RX_HDR_BUF_SIZE (2048 - 64)
@@ -143,7 +140,8 @@ struct ice_rx_queue {
/* address of temp buffer for RX split mbufs */
struct rte_eth_rxseg_split rxseg[ICE_RX_MAX_NSEG];
uint32_t rxseg_nb;
- bool ts_enable; /* if rxq timestamp is enabled */
+ int ts_offset; /* dynamic mbuf timestamp field offset */
+ uint64_t ts_flag; /* dynamic mbuf timestamp flag */
};
/* Offload features */
--
2.47.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-05-06 17:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-06 17:50 [PATCH] net/ice: Localize dynamic mbuf timestamp data Jake Freeland
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).