Convert the legacy rte_atomicNN operations to stdatomic.
* Remove variable ena_alloc_cnt is defined by not used.
  It is a leftover from previous memzone naming scheme.

* Convert the legacy rte_atomic32_t and rte_atomic32_{inc,dec,set,read}
  macros to C11 stdatomic equivalents.
  Memory ordering is kept at seq_cst,
  matching the implicit ordering of the legacy API.

* Do not use rte_atomic for statistics
 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/ena/base/ena_plat_dpdk.h | 14 +++++++++-----
 drivers/net/ena/ena_ethdev.c         | 21 ++++++---------------
 drivers/net/ena/ena_ethdev.h         |  7 +++----
 3 files changed, 18 insertions(+), 24 deletions(-)

diff --git a/drivers/net/ena/base/ena_plat_dpdk.h 
b/drivers/net/ena/base/ena_plat_dpdk.h
index c84420de22..83b354d9da 100644
--- a/drivers/net/ena/base/ena_plat_dpdk.h
+++ b/drivers/net/ena/base/ena_plat_dpdk.h
@@ -40,7 +40,7 @@ typedef uint64_t dma_addr_t;
 #endif
 
 #define ENA_PRIu64 PRIu64
-#define ena_atomic32_t rte_atomic32_t
+typedef RTE_ATOMIC(int32_t) ena_atomic32_t;
 #define ena_mem_handle_t const struct rte_memzone *
 
 #define SZ_256 (256U)
@@ -267,10 +267,14 @@ ena_mem_alloc_coherent(struct rte_eth_dev_data *data, 
size_t size,
 #define ENA_REG_READ32(bus, reg)                                              \
        __extension__ ({ (void)(bus); rte_read32_relaxed((reg)); })
 
-#define ATOMIC32_INC(i32_ptr) rte_atomic32_inc(i32_ptr)
-#define ATOMIC32_DEC(i32_ptr) rte_atomic32_dec(i32_ptr)
-#define ATOMIC32_SET(i32_ptr, val) rte_atomic32_set(i32_ptr, val)
-#define ATOMIC32_READ(i32_ptr) rte_atomic32_read(i32_ptr)
+#define ATOMIC32_INC(i32_ptr)                                                  
\
+       rte_atomic_fetch_add_explicit((i32_ptr), 1, rte_memory_order_seq_cst)
+#define ATOMIC32_DEC(i32_ptr)                                                  
\
+       rte_atomic_fetch_sub_explicit((i32_ptr), 1, rte_memory_order_seq_cst)
+#define ATOMIC32_SET(i32_ptr, val)                                             
\
+       rte_atomic_store_explicit((i32_ptr), (val), rte_memory_order_seq_cst)
+#define ATOMIC32_READ(i32_ptr)                                                 
\
+       rte_atomic_load_explicit((i32_ptr), rte_memory_order_seq_cst)
 
 #define msleep(x) rte_delay_us(x * 1000)
 #define udelay(x) rte_delay_us(x)
diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index ea4afbc75d..e9c484456c 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -121,12 +121,6 @@ struct ena_stats {
  */
 #define ENA_DEVARG_ENABLE_FRAG_BYPASS "enable_frag_bypass"
 
-/*
- * Each rte_memzone should have unique name.
- * To satisfy it, count number of allocation and add it to name.
- */
-rte_atomic64_t ena_alloc_cnt;
-
 static const struct ena_stats ena_stats_global_strings[] = {
        ENA_STAT_GLOBAL_ENTRY(wd_expired),
        ENA_STAT_GLOBAL_ENTRY(dev_start),
@@ -1249,10 +1243,7 @@ static void ena_stats_restart(struct rte_eth_dev *dev)
 {
        struct ena_adapter *adapter = dev->data->dev_private;
 
-       rte_atomic64_init(&adapter->drv_stats->ierrors);
-       rte_atomic64_init(&adapter->drv_stats->oerrors);
-       rte_atomic64_init(&adapter->drv_stats->rx_nombuf);
-       adapter->drv_stats->rx_drops = 0;
+       memset(adapter->drv_stats, 0, sizeof(struct ena_driver_stats));
 }
 
 static int ena_stats_get(struct rte_eth_dev *dev,
@@ -1289,9 +1280,9 @@ static int ena_stats_get(struct rte_eth_dev *dev,
 
        /* Driver related stats */
        stats->imissed = adapter->drv_stats->rx_drops;
-       stats->ierrors = rte_atomic64_read(&adapter->drv_stats->ierrors);
-       stats->oerrors = rte_atomic64_read(&adapter->drv_stats->oerrors);
-       stats->rx_nombuf = rte_atomic64_read(&adapter->drv_stats->rx_nombuf);
+       stats->ierrors = adapter->drv_stats->ierrors;
+       stats->oerrors = adapter->drv_stats->oerrors;
+       stats->rx_nombuf = adapter->drv_stats->rx_nombuf;
 
        /* Queue statistics */
        if (qstats) {
@@ -1887,7 +1878,7 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, 
unsigned int count)
        /* get resources for incoming packets */
        rc = rte_pktmbuf_alloc_bulk(rxq->mb_pool, mbufs, count);
        if (unlikely(rc < 0)) {
-               rte_atomic64_inc(&rxq->adapter->drv_stats->rx_nombuf);
+               ++rxq->adapter->drv_stats->rx_nombuf;
                ++rxq->rx_stats.mbuf_alloc_fail;
                PMD_RX_LOG_LINE(DEBUG, "There are not enough free buffers");
                return 0;
@@ -3014,7 +3005,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct 
rte_mbuf **rx_pkts,
 
                if (unlikely(mbuf->ol_flags &
                                (RTE_MBUF_F_RX_IP_CKSUM_BAD | 
RTE_MBUF_F_RX_L4_CKSUM_BAD)))
-                       rte_atomic64_inc(&rx_ring->adapter->drv_stats->ierrors);
+                       ++rx_ring->adapter->drv_stats->ierrors;
 
                rx_pkts[completed] = mbuf;
                rx_ring->rx_stats.bytes += mbuf->pkt_len;
diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h
index 3a66d79384..b204b07767 100644
--- a/drivers/net/ena/ena_ethdev.h
+++ b/drivers/net/ena/ena_ethdev.h
@@ -6,7 +6,6 @@
 #ifndef _ENA_ETHDEV_H_
 #define _ENA_ETHDEV_H_
 
-#include <rte_atomic.h>
 #include <rte_ether.h>
 #include <ethdev_driver.h>
 #include <ethdev_pci.h>
@@ -225,9 +224,9 @@ enum ena_adapter_state {
 };
 
 struct ena_driver_stats {
-       rte_atomic64_t ierrors;
-       rte_atomic64_t oerrors;
-       rte_atomic64_t rx_nombuf;
+       u64 ierrors;
+       u64 oerrors;
+       u64 rx_nombuf;
        u64 rx_drops;
 };
 
-- 
2.53.0

Reply via email to