> -----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
>
> 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 <[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(-)
>
> 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 <[email protected]>
Thanks.
-Hyong