Software counters are mandatory since hardware counters are not
implemented.

Signed-off-by: Adrien Mazarguil <adrien.mazarg...@6wind.com>
---
 config/common_base        |  1 -
 doc/guides/nics/mlx4.rst  |  6 ------
 drivers/net/mlx4/Makefile |  4 ----
 drivers/net/mlx4/mlx4.c   | 37 -------------------------------------
 drivers/net/mlx4/mlx4.h   | 12 ------------
 5 files changed, 60 deletions(-)

diff --git a/config/common_base b/config/common_base
index 7805605..d768804 100644
--- a/config/common_base
+++ b/config/common_base
@@ -216,7 +216,6 @@ CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
 CONFIG_RTE_LIBRTE_MLX4_SGE_WR_N=4
 CONFIG_RTE_LIBRTE_MLX4_MAX_INLINE=0
 CONFIG_RTE_LIBRTE_MLX4_TX_MP_CACHE=8
-CONFIG_RTE_LIBRTE_MLX4_SOFT_COUNTERS=1
 
 #
 # Compile burst-oriented Mellanox ConnectX-4 & ConnectX-5 (MLX5) PMD
diff --git a/doc/guides/nics/mlx4.rst b/doc/guides/nics/mlx4.rst
index 04788f2..729e6c1 100644
--- a/doc/guides/nics/mlx4.rst
+++ b/doc/guides/nics/mlx4.rst
@@ -97,7 +97,6 @@ Limitations
 - RSS RETA cannot be configured
 - RSS always includes L3 (IPv4/IPv6) and L4 (UDP/TCP). They cannot be
   dissociated.
-- Hardware counters are not implemented (they are software counters).
 
 Configuration
 -------------
@@ -137,11 +136,6 @@ These options can be modified in the ``.config`` file.
 
   This value is always 1 for RX queues since they use a single MP.
 
-- ``CONFIG_RTE_LIBRTE_MLX4_SOFT_COUNTERS`` (default **1**)
-
-  Toggle software counters. No counters are available if this option is
-  disabled since hardware counters are not supported.
-
 Environment variables
 ~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/drivers/net/mlx4/Makefile b/drivers/net/mlx4/Makefile
index ab2a867..2db9b10 100644
--- a/drivers/net/mlx4/Makefile
+++ b/drivers/net/mlx4/Makefile
@@ -80,10 +80,6 @@ ifdef CONFIG_RTE_LIBRTE_MLX4_TX_MP_CACHE
 CFLAGS += -DMLX4_PMD_TX_MP_CACHE=$(CONFIG_RTE_LIBRTE_MLX4_TX_MP_CACHE)
 endif
 
-ifdef CONFIG_RTE_LIBRTE_MLX4_SOFT_COUNTERS
-CFLAGS += -DMLX4_PMD_SOFT_COUNTERS=$(CONFIG_RTE_LIBRTE_MLX4_SOFT_COUNTERS)
-endif
-
 include $(RTE_SDK)/mk/rte.lib.mk
 
 # Generate and clean-up mlx4_autoconf.h.
diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index 2b5527b..34ef80f 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -34,7 +34,6 @@
 /*
  * Known limitations:
  * - RSS hash key and options cannot be modified.
- * - Hardware counters aren't implemented.
  */
 
 /* System headers. */
@@ -1372,9 +1371,7 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                struct txq_elt *elt_next = &(*txq->elts)[elts_head_next];
                struct txq_elt *elt = &(*txq->elts)[elts_head];
                unsigned int segs = NB_SEGS(buf);
-#ifdef MLX4_PMD_SOFT_COUNTERS
                unsigned int sent_size = 0;
-#endif
                uint32_t send_flags = 0;
 
                /* Clean up old buffer. */
@@ -1452,9 +1449,7 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                                         send_flags);
                        if (unlikely(err))
                                goto stop;
-#ifdef MLX4_PMD_SOFT_COUNTERS
                        sent_size += length;
-#endif
                } else {
 #if MLX4_PMD_SGE_WR_N > 1
                        struct ibv_sge sges[MLX4_PMD_SGE_WR_N];
@@ -1473,9 +1468,7 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                                 send_flags);
                        if (unlikely(err))
                                goto stop;
-#ifdef MLX4_PMD_SOFT_COUNTERS
                        sent_size += ret.length;
-#endif
 #else /* MLX4_PMD_SGE_WR_N > 1 */
                        DEBUG("%p: TX scattered buffers support not"
                              " compiled in", (void *)txq);
@@ -1483,19 +1476,15 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
 #endif /* MLX4_PMD_SGE_WR_N > 1 */
                }
                elts_head = elts_head_next;
-#ifdef MLX4_PMD_SOFT_COUNTERS
                /* Increment sent bytes counter. */
                txq->stats.obytes += sent_size;
-#endif
        }
 stop:
        /* Take a shortcut if nothing must be sent. */
        if (unlikely(i == 0))
                return 0;
-#ifdef MLX4_PMD_SOFT_COUNTERS
        /* Increment sent packets counter. */
        txq->stats.opackets += i;
-#endif
        /* Ring QP doorbell. */
        err = txq->if_qp->send_flush(txq->qp);
        if (unlikely(err)) {
@@ -2786,10 +2775,8 @@ mlx4_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                                      " completion status (%d): %s",
                                      (void *)rxq, wc.wr_id, wc.status,
                                      ibv_wc_status_str(wc.status));
-#ifdef MLX4_PMD_SOFT_COUNTERS
                                /* Increment dropped packets counter. */
                                ++rxq->stats.idropped;
-#endif
                                /* Link completed WRs together for repost. */
                                *next = wr;
                                next = &wr->next;
@@ -2901,10 +2888,8 @@ mlx4_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                /* Return packet. */
                *(pkts++) = pkt_buf;
                ++pkts_ret;
-#ifdef MLX4_PMD_SOFT_COUNTERS
                /* Increase bytes counter. */
                rxq->stats.ibytes += pkt_buf_len;
-#endif
 repost:
                if (++elts_head >= elts_n)
                        elts_head = 0;
@@ -2924,10 +2909,8 @@ mlx4_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                abort();
        }
        rxq->elts_head = elts_head;
-#ifdef MLX4_PMD_SOFT_COUNTERS
        /* Increase packets counter. */
        rxq->stats.ipackets += pkts_ret;
-#endif
        return pkts_ret;
 }
 
@@ -3008,10 +2991,8 @@ mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                                      " completion status (%d): %s",
                                      (void *)rxq, wc.wr_id, wc.status,
                                      ibv_wc_status_str(wc.status));
-#ifdef MLX4_PMD_SOFT_COUNTERS
                                /* Increment dropped packets counter. */
                                ++rxq->stats.idropped;
-#endif
                                /* Add SGE to array for repost. */
                                sges[i] = elt->sge;
                                goto repost;
@@ -3062,10 +3043,8 @@ mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                /* Return packet. */
                *(pkts++) = seg;
                ++pkts_ret;
-#ifdef MLX4_PMD_SOFT_COUNTERS
                /* Increase bytes counter. */
                rxq->stats.ibytes += len;
-#endif
 repost:
                if (++elts_head >= elts_n)
                        elts_head = 0;
@@ -3083,10 +3062,8 @@ mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
                abort();
        }
        rxq->elts_head = elts_head;
-#ifdef MLX4_PMD_SOFT_COUNTERS
        /* Increase packets counter. */
        rxq->stats.ipackets += pkts_ret;
-#endif
        return pkts_ret;
 }
 
@@ -4270,17 +4247,13 @@ mlx4_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
                        continue;
                idx = rxq->stats.idx;
                if (idx < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
-#ifdef MLX4_PMD_SOFT_COUNTERS
                        tmp.q_ipackets[idx] += rxq->stats.ipackets;
                        tmp.q_ibytes[idx] += rxq->stats.ibytes;
-#endif
                        tmp.q_errors[idx] += (rxq->stats.idropped +
                                              rxq->stats.rx_nombuf);
                }
-#ifdef MLX4_PMD_SOFT_COUNTERS
                tmp.ipackets += rxq->stats.ipackets;
                tmp.ibytes += rxq->stats.ibytes;
-#endif
                tmp.ierrors += rxq->stats.idropped;
                tmp.rx_nombuf += rxq->stats.rx_nombuf;
        }
@@ -4291,21 +4264,14 @@ mlx4_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
                        continue;
                idx = txq->stats.idx;
                if (idx < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
-#ifdef MLX4_PMD_SOFT_COUNTERS
                        tmp.q_opackets[idx] += txq->stats.opackets;
                        tmp.q_obytes[idx] += txq->stats.obytes;
-#endif
                        tmp.q_errors[idx] += txq->stats.odropped;
                }
-#ifdef MLX4_PMD_SOFT_COUNTERS
                tmp.opackets += txq->stats.opackets;
                tmp.obytes += txq->stats.obytes;
-#endif
                tmp.oerrors += txq->stats.odropped;
        }
-#ifndef MLX4_PMD_SOFT_COUNTERS
-       /* FIXME: retrieve and add hardware counters. */
-#endif
        *stats = tmp;
        priv_unlock(priv);
 }
@@ -4340,9 +4306,6 @@ mlx4_stats_reset(struct rte_eth_dev *dev)
                (*priv->txqs)[i]->stats =
                        (struct mlx4_txq_stats){ .idx = idx };
        }
-#ifndef MLX4_PMD_SOFT_COUNTERS
-       /* FIXME: reset hardware counters. */
-#endif
        priv_unlock(priv);
 }
 
diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
index 4b42626..b88d8b0 100644
--- a/drivers/net/mlx4/mlx4.h
+++ b/drivers/net/mlx4/mlx4.h
@@ -101,14 +101,6 @@
 #define MLX4_PMD_TX_MP_CACHE 8
 #endif
 
-/*
- * If defined, only use software counters. The PMD will never ask the hardware
- * for these, and many of them won't be available.
- */
-#ifndef MLX4_PMD_SOFT_COUNTERS
-#define MLX4_PMD_SOFT_COUNTERS 1
-#endif
-
 /* Alarm timeout. */
 #define MLX4_ALARM_TIMEOUT_US 100000
 
@@ -180,10 +172,8 @@ enum {
 
 struct mlx4_rxq_stats {
        unsigned int idx; /**< Mapping index. */
-#ifdef MLX4_PMD_SOFT_COUNTERS
        uint64_t ipackets; /**< Total of successfully received packets. */
        uint64_t ibytes; /**< Total of successfully received bytes. */
-#endif
        uint64_t idropped; /**< Total of packets dropped when RX ring full. */
        uint64_t rx_nombuf; /**< Total of RX mbuf allocation failures. */
 };
@@ -246,10 +236,8 @@ struct txq_elt {
 
 struct mlx4_txq_stats {
        unsigned int idx; /**< Mapping index. */
-#ifdef MLX4_PMD_SOFT_COUNTERS
        uint64_t opackets; /**< Total of successfully sent packets. */
        uint64_t obytes;   /**< Total of successfully sent bytes. */
-#endif
        uint64_t odropped; /**< Total of packets not sent when TX ring full. */
 };
 
-- 
2.1.4

Reply via email to