]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx4: fix Tx packet drop application report
authorMatan Azrad <matan@mellanox.com>
Wed, 6 Dec 2017 17:57:49 +0000 (17:57 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
When invalid lkey is sent to HW, HW sends an error notification in
completion function.

The previous code wouldn't crash but doesn't add any application report
in case of completion error, so application cannot know that packet
actually was dropped in case of invalid lkey.

Return back the lkey validation to Tx path.

Fixes: 2eee458746bc ("net/mlx4: remove error flows from Tx fast path")
Cc: stable@dpdk.org
Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
drivers/net/mlx4/mlx4_rxtx.c

index 5bc98740dc52994d368ab2202f2902752a157ec7..5a78bc03036aa286461935ca65c61503a8796be7 100644 (file)
@@ -468,7 +468,6 @@ mlx4_tx_burst_segs(struct rte_mbuf *buf, struct txq *txq,
                /* Memory region key (big endian) for this memory pool. */
                lkey = mlx4_txq_mp2mr(txq, mlx4_txq_mb2mp(sbuf));
                dseg->lkey = rte_cpu_to_be_32(lkey);
-#ifndef NDEBUG
                /* Calculate the needed work queue entry size for this packet */
                if (unlikely(dseg->lkey == rte_cpu_to_be_32((uint32_t)-1))) {
                        /* MR does not exist. */
@@ -486,7 +485,6 @@ mlx4_tx_burst_segs(struct rte_mbuf *buf, struct txq *txq,
                                        (sq->head & sq->txbb_cnt) ? 0 : 1);
                        return -1;
                }
-#endif /* NDEBUG */
                if (likely(sbuf->data_len)) {
                        byte_count = rte_cpu_to_be_32(sbuf->data_len);
                } else {
@@ -636,7 +634,6 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n)
                        /* Memory region key (big endian). */
                        lkey = mlx4_txq_mp2mr(txq, mlx4_txq_mb2mp(buf));
                        dseg->lkey = rte_cpu_to_be_32(lkey);
-#ifndef NDEBUG
                        if (unlikely(dseg->lkey ==
                                rte_cpu_to_be_32((uint32_t)-1))) {
                                /* MR does not exist. */
@@ -655,7 +652,6 @@ mlx4_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n)
                                elt->buf = NULL;
                                break;
                        }
-#endif /* NDEBUG */
                        /* Never be TXBB aligned, no need compiler barrier. */
                        dseg->byte_count = rte_cpu_to_be_32(buf->data_len);
                        /* Fill the control parameters for this packet. */