net/mlx4: remove Tx completion elements counter
authorMatan Azrad <matan@mellanox.com>
Wed, 6 Dec 2017 17:57:56 +0000 (17:57 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
This counter saved the descriptor elements which are waiting to be
completed and was used to know if completion function should be
called.

This completion check can be done by other elements management
variables and we can prevent this counter management.

Remove this counter and replace the completion check easily by other
elements management variables.

Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
drivers/net/mlx4/mlx4_rxtx.c
drivers/net/mlx4/mlx4_rxtx.h
drivers/net/mlx4/mlx4_txq.c

index d53e607..fbc911f 100644 (file)
@@ -367,7 +367,6 @@ mlx4_txq_complete(struct txq *txq, const unsigned int elts_m,
        /* Update CQ consumer index. */
        cq->cons_index = cons_index;
        *cq->set_ci_db = rte_cpu_to_be_32(cons_index & MLX4_CQ_DB_CI_MASK);
-       txq->elts_comp -= completed;
        txq->elts_tail = elts_tail;
 }
 
@@ -585,15 +584,15 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n)
        const unsigned int elts_m = elts_n - 1;
        unsigned int bytes_sent = 0;
        unsigned int i;
-       unsigned int max;
+       unsigned int max = elts_head - txq->elts_tail;
        struct mlx4_sq *sq = &txq->msq;
        volatile struct mlx4_wqe_ctrl_seg *ctrl;
        struct txq_elt *elt;
 
        assert(txq->elts_comp_cd != 0);
-       if (likely(txq->elts_comp != 0))
+       if (likely(max >= txq->elts_comp_cd_init))
                mlx4_txq_complete(txq, elts_m, sq);
-       max = (elts_n - (elts_head - txq->elts_tail));
+       max = elts_n - max;
        assert(max >= 1);
        assert(max <= elts_n);
        /* Always leave one free entry in the ring. */
@@ -740,7 +739,6 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n)
        /* Ring QP doorbell. */
        rte_write32(txq->msq.doorbell_qpn, txq->msq.db);
        txq->elts_head += i;
-       txq->elts_comp += i;
        return i;
 }
 
index 36ae03a..b93e2bc 100644 (file)
@@ -125,7 +125,6 @@ struct txq {
        struct mlx4_cq mcq; /**< Info for directly manipulating the CQ. */
        unsigned int elts_head; /**< Current index in (*elts)[]. */
        unsigned int elts_tail; /**< First element awaiting completion. */
-       unsigned int elts_comp; /**< Number of packets awaiting completion. */
        int elts_comp_cd; /**< Countdown for next completion. */
        unsigned int elts_comp_cd_init; /**< Initial value for countdown. */
        unsigned int elts_n; /**< (*elts)[] length. */
index c5048db..d651e49 100644 (file)
@@ -273,7 +273,6 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
                .elts = elts,
                .elts_head = 0,
                .elts_tail = 0,
-               .elts_comp = 0,
                /*
                 * Request send completion every MLX4_PMD_TX_PER_COMP_REQ
                 * packets or at least 4 times per ring.