From: Matan Azrad Date: Wed, 6 Dec 2017 17:57:49 +0000 (+0000) Subject: net/mlx4: fix Tx packet drop application report X-Git-Tag: spdx-start~577 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=e3ecea72a85626a0708625b7ad9a290ebdecfe24;p=dpdk.git net/mlx4: fix Tx packet drop application report 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 Acked-by: Adrien Mazarguil --- diff --git a/drivers/net/mlx4/mlx4_rxtx.c b/drivers/net/mlx4/mlx4_rxtx.c index 5bc98740dc..5a78bc0303 100644 --- a/drivers/net/mlx4/mlx4_rxtx.c +++ b/drivers/net/mlx4/mlx4_rxtx.c @@ -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. */