[PATCH v6 06/24] net/enic: do not use deprecated rte_atomic64

Hyong Youb Kim (hyonkim) hyonkim at cisco.com
Fri Jul 31 08:09:45 CEST 2026



> -----Original Message-----
> From: Stephen Hemminger <stephen at networkplumber.org>
> Sent: Friday, July 31, 2026 1:58 PM
> To: dev at dpdk.org
> Cc: Stephen Hemminger <stephen at networkplumber.org>; John Daley
> (johndale) <johndale at cisco.com>; Hyong Youb Kim (hyonkim)
> <hyonkim at cisco.com>; Bruce Richardson <bruce.richardson at intel.com>;
> Konstantin Ananyev <konstantin.ananyev at huawei.com>
> Subject: [PATCH v6 06/24] net/enic: do not use deprecated rte_atomic64
> 
> The rte_atomic64 datatype and functions are deprecated.
> This driver was only using it for error statistics where atomic
> is not necessary. The DPDK PMD model is that statistics do
> not have to be exact in face of contention.
> 
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
>  drivers/net/enic/enic.h               |  6 +++---
>  drivers/net/enic/enic_compat.h        |  1 -
>  drivers/net/enic/enic_main.c          | 17 +++++++----------
>  drivers/net/enic/enic_rxtx.c          | 14 ++++++--------
>  drivers/net/enic/enic_rxtx_vec_avx2.c |  4 ++--
>  5 files changed, 18 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h
> index 87f6b35fcd..0a8d4a29ca 100644
> --- a/drivers/net/enic/enic.h
> +++ b/drivers/net/enic/enic.h
> @@ -59,9 +59,9 @@
>  #define ENICPMD_RXQ_INTR_OFFSET 1
> 
>  struct enic_soft_stats {
> -	rte_atomic64_t rx_nombuf;
> -	rte_atomic64_t rx_packet_errors;
> -	rte_atomic64_t tx_oversized;
> +	uint64_t rx_nombuf;
> +	uint64_t rx_packet_errors;
> +	uint64_t tx_oversized;
>  };
> 
>  struct enic_memzone_entry {
> diff --git a/drivers/net/enic/enic_compat.h b/drivers/net/enic/enic_compat.h
> index 7cff6831b9..3ce4299e81 100644
> --- a/drivers/net/enic/enic_compat.h
> +++ b/drivers/net/enic/enic_compat.h
> @@ -9,7 +9,6 @@
>  #include <stdio.h>
>  #include <unistd.h>
> 
> -#include <rte_atomic.h>
>  #include <rte_malloc.h>
>  #include <rte_log.h>
>  #include <rte_io.h>
> diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
> index 2696fa77d4..fb9a5754c9 100644
> --- a/drivers/net/enic/enic_main.c
> +++ b/drivers/net/enic/enic_main.c
> @@ -83,17 +83,15 @@ static void enic_log_q_error(struct enic *enic)
>  static void enic_clear_soft_stats(struct enic *enic)
>  {
>  	struct enic_soft_stats *soft_stats = &enic->soft_stats;
> -	rte_atomic64_clear(&soft_stats->rx_nombuf);
> -	rte_atomic64_clear(&soft_stats->rx_packet_errors);
> -	rte_atomic64_clear(&soft_stats->tx_oversized);
> +
> +	memset(soft_stats, 0, sizeof(*soft_stats));
>  }
> 
>  static void enic_init_soft_stats(struct enic *enic)
>  {
>  	struct enic_soft_stats *soft_stats = &enic->soft_stats;
> -	rte_atomic64_init(&soft_stats->rx_nombuf);
> -	rte_atomic64_init(&soft_stats->rx_packet_errors);
> -	rte_atomic64_init(&soft_stats->tx_oversized);
> +
> +	memset(soft_stats, 0, sizeof(*soft_stats));
>  	enic_clear_soft_stats(enic);
>  }
> 
> @@ -132,7 +130,7 @@ int enic_dev_stats_get(struct enic *enic, struct
> rte_eth_stats *r_stats,
>  	 * counted in ibytes even though truncated packets are dropped
>  	 * which can make ibytes be slightly higher than it should be.
>  	 */
> -	rx_packet_errors = rte_atomic64_read(&soft_stats->rx_packet_errors);
> +	rx_packet_errors = soft_stats->rx_packet_errors;
>  	rx_truncated = rx_packet_errors - stats->rx.rx_errors;
> 
>  	r_stats->ipackets = stats->rx.rx_frames_ok - rx_truncated;
> @@ -142,12 +140,11 @@ int enic_dev_stats_get(struct enic *enic, struct
> rte_eth_stats *r_stats,
>  	r_stats->obytes = stats->tx.tx_bytes_ok;
> 
>  	r_stats->ierrors = stats->rx.rx_errors + stats->rx.rx_drop;
> -	r_stats->oerrors = stats->tx.tx_errors
> -			   + rte_atomic64_read(&soft_stats->tx_oversized);
> +	r_stats->oerrors = stats->tx.tx_errors + soft_stats->tx_oversized;
> 
>  	r_stats->imissed = stats->rx.rx_no_bufs + rx_truncated;
> 
> -	r_stats->rx_nombuf = rte_atomic64_read(&soft_stats->rx_nombuf);
> +	r_stats->rx_nombuf = soft_stats->rx_nombuf;
>  	return 0;
>  }
> 
> diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c
> index 549a153332..c87d947b93 100644
> --- a/drivers/net/enic/enic_rxtx.c
> +++ b/drivers/net/enic/enic_rxtx.c
> @@ -112,7 +112,7 @@ enic_recv_pkts_common(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		/* allocate a new mbuf */
>  		nmb = rte_mbuf_raw_alloc(rq->mp);
>  		if (nmb == NULL) {
> -			rte_atomic64_inc(&enic->soft_stats.rx_nombuf);
> +			++enic->soft_stats.rx_nombuf;
>  			break;
>  		}
> 
> @@ -185,7 +185,7 @@ enic_recv_pkts_common(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		}
>  		if (unlikely(packet_error)) {
>  			rte_pktmbuf_free(first_seg);
> -			rte_atomic64_inc(&enic->soft_stats.rx_packet_errors);
> +			++enic->soft_stats.rx_packet_errors;
>  			continue;
>  		}
> 
> @@ -303,7 +303,7 @@ enic_noscatter_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		if (unlikely(cqd->bytes_written_flags &
>  			     CQ_ENET_RQ_DESC_FLAGS_TRUNCATED)) {
>  			rte_pktmbuf_free(*rxmb++);
> -			rte_atomic64_inc(&enic->soft_stats.rx_packet_errors);
> +			++enic->soft_stats.rx_packet_errors;
>  			cqd++;
>  			continue;
>  		}
> @@ -505,14 +505,12 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct
> rte_mbuf **tx_pkts,
>  	uint8_t offload_mode;
>  	uint16_t header_len;
>  	uint64_t tso;
> -	rte_atomic64_t *tx_oversized;
> 
>  	enic_cleanup_wq(enic, wq);
>  	wq_desc_avail = vnic_wq_desc_avail(wq);
>  	head_idx = wq->head_idx;
>  	desc_count = wq->ring.desc_count;
>  	ol_flags_mask = RTE_MBUF_F_TX_VLAN | RTE_MBUF_F_TX_IP_CKSUM
> | RTE_MBUF_F_TX_L4_MASK;
> -	tx_oversized = &enic->soft_stats.tx_oversized;
> 
>  	nb_pkts = RTE_MIN(nb_pkts, ENIC_TX_XMIT_MAX);
> 
> @@ -527,7 +525,7 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct
> rte_mbuf **tx_pkts,
>  		/* drop packet if it's too big to send */
>  		if (unlikely(!tso && pkt_len > ENIC_TX_MAX_PKT_SIZE)) {
>  			rte_pktmbuf_free(tx_pkt);
> -			rte_atomic64_inc(tx_oversized);
> +			++enic->soft_stats.tx_oversized;
>  			continue;
>  		}
> 
> @@ -558,7 +556,7 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct
> rte_mbuf **tx_pkts,
>  			if (unlikely(header_len == 0 || ((tx_pkt->tso_segsz +
>  			    header_len) > ENIC_TX_MAX_PKT_SIZE))) {
>  				rte_pktmbuf_free(tx_pkt);
> -				rte_atomic64_inc(tx_oversized);
> +				++enic->soft_stats.tx_oversized;
>  				continue;
>  			}
> 
> @@ -681,7 +679,7 @@ static void enqueue_simple_pkts(struct rte_mbuf
> **pkts,
>  		 */
>  		if (unlikely(p->pkt_len > ENIC_TX_MAX_PKT_SIZE)) {
>  			desc->length = ENIC_TX_MAX_PKT_SIZE;
> -			rte_atomic64_inc(&enic->soft_stats.tx_oversized);
> +			++enic->soft_stats.tx_oversized;
>  		}
>  		desc++;
>  	}
> diff --git a/drivers/net/enic/enic_rxtx_vec_avx2.c
> b/drivers/net/enic/enic_rxtx_vec_avx2.c
> index 600efff270..53589ab788 100644
> --- a/drivers/net/enic/enic_rxtx_vec_avx2.c
> +++ b/drivers/net/enic/enic_rxtx_vec_avx2.c
> @@ -81,7 +81,7 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		if (unlikely(cqd->bytes_written_flags &
>  			     CQ_ENET_RQ_DESC_FLAGS_TRUNCATED)) {
>  			rte_pktmbuf_free(*rxmb++);
> -			rte_atomic64_inc(&enic->soft_stats.rx_packet_errors);
> +			++enic->soft_stats.rx_packet_errors;
>  		} else {
>  			*rx++ = rx_one(cqd, *rxmb++, enic);
>  		}
> @@ -761,7 +761,7 @@ enic_noscatter_vec_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		if (unlikely(cqd->bytes_written_flags &
>  			     CQ_ENET_RQ_DESC_FLAGS_TRUNCATED)) {
>  			rte_pktmbuf_free(*rxmb++);
> -			rte_atomic64_inc(&enic->soft_stats.rx_packet_errors);
> +			++enic->soft_stats.rx_packet_errors;
>  		} else {
>  			*rx++ = rx_one(cqd, *rxmb++, enic);
>  		}
> --
> 2.53.0

Acked-by: Hyong Youb Kim <hyonkim at cisco.com>

Thanks.
-Hyong



More information about the dev mailing list