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

"Hyong Youb Kim (hyonkim)" <[email protected]> Fri, 31 Jul 2026 06:09:45 +0000
Newsgroups org.dpdk.dev
Message-ID <IA3PR11MB8987CB41FEACCDBF2E17B2F0BFC82@IA3PR11MB8987.namprd11.prod.outlook.com>

> -----Original Message-----
> From: Stephen Hemminger <[email protected]>
> Sent: Friday, July 31, 2026 1:58 PM
> To: [email protected]
> Cc: Stephen Hemminger <[email protected]>; John Daley
> (johndale) <[email protected]>; Hyong Youb Kim (hyonkim)
> <[email protected]>; Bruce Richardson <[email protected]>;
> Konstantin Ananyev <[email protected]>
> Subject: [PATCH v6 06/24] net/enic: do not use deprecated rte_atomic64
>=20
> 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.
>=20
> Signed-off-by: Stephen Hemminger <[email protected]>
> ---
>  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(-)
>=20
> 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
>=20
>  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;
>  };
>=20
>  struct enic_memzone_entry {
> diff --git a/drivers/net/enic/enic_compat.h b/drivers/net/enic/enic_compa=
t.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>
>=20
> -#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 =3D &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));
>  }
>=20
>  static void enic_init_soft_stats(struct enic *enic)
>  {
>  	struct enic_soft_stats *soft_stats =3D &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);
>  }
>=20
> @@ -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 =3D rte_atomic64_read(&soft_stats->rx_packet_errors);
> +	rx_packet_errors =3D soft_stats->rx_packet_errors;
>  	rx_truncated =3D rx_packet_errors - stats->rx.rx_errors;
>=20
>  	r_stats->ipackets =3D 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 =3D stats->tx.tx_bytes_ok;
>=20
>  	r_stats->ierrors =3D stats->rx.rx_errors + stats->rx.rx_drop;
> -	r_stats->oerrors =3D stats->tx.tx_errors
> -			   + rte_atomic64_read(&soft_stats->tx_oversized);
> +	r_stats->oerrors =3D stats->tx.tx_errors + soft_stats->tx_oversized;
>=20
>  	r_stats->imissed =3D stats->rx.rx_no_bufs + rx_truncated;
>=20
> -	r_stats->rx_nombuf =3D rte_atomic64_read(&soft_stats->rx_nombuf);
> +	r_stats->rx_nombuf =3D soft_stats->rx_nombuf;
>  	return 0;
>  }
>=20
> 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 =3D rte_mbuf_raw_alloc(rq->mp);
>  		if (nmb =3D=3D NULL) {
> -			rte_atomic64_inc(&enic->soft_stats.rx_nombuf);
> +			++enic->soft_stats.rx_nombuf;
>  			break;
>  		}
>=20
> @@ -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;
>  		}
>=20
> @@ -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;
>=20
>  	enic_cleanup_wq(enic, wq);
>  	wq_desc_avail =3D vnic_wq_desc_avail(wq);
>  	head_idx =3D wq->head_idx;
>  	desc_count =3D wq->ring.desc_count;
>  	ol_flags_mask =3D RTE_MBUF_F_TX_VLAN | RTE_MBUF_F_TX_IP_CKSUM
> | RTE_MBUF_F_TX_L4_MASK;
> -	tx_oversized =3D &enic->soft_stats.tx_oversized;
>=20
>  	nb_pkts =3D RTE_MIN(nb_pkts, ENIC_TX_XMIT_MAX);
>=20
> @@ -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;
>  		}
>=20
> @@ -558,7 +556,7 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct
> rte_mbuf **tx_pkts,
>  			if (unlikely(header_len =3D=3D 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;
>  			}
>=20
> @@ -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 =3D 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++ =3D 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++ =3D rx_one(cqd, *rxmb++, enic);
>  		}
> --
> 2.53.0

Acked-by: Hyong Youb Kim <[email protected]>

Thanks.
-Hyong