[dpdk-dev] [PATCH 1/5] net/mlx5: last WQE no room inline

Elad Persiko eladpe at mellanox.com
Sun Jan 8 16:41:59 CET 2017


Prior to this patch, when sending a packet and the following
conditions were reached:
	1. last working queue element is used.
	2. inline was requested by the user
	3. no room for inline packet.
then the inline request was ignored and the packet was sent
by pointer completely.

This patch handles this scenario. In this case the last
work queue element is turned to be a null work queue element and
the packet is being sent after the wrap around.

Signed-off-by: Elad Persiko <eladpe at mellanox.com>
---
 drivers/net/mlx5/mlx5_rxtx.c | 12 ++++++++++++
 drivers/net/mlx5/mlx5_txq.c  |  8 ++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
index e0ee2f2..be38aed 100644
--- a/drivers/net/mlx5/mlx5_rxtx.c
+++ b/drivers/net/mlx5/mlx5_rxtx.c
@@ -481,6 +481,17 @@
 				pkt_inline_sz += copy_b;
 				/* Sanity check. */
 				assert(addr <= addr_end);
+			} else {
+				wqe->ctrl = (rte_v128u32_t){
+					htonl(txq->wqe_ci << 8),
+					htonl(txq->qp_num_8s | 1),
+					0,
+					0,
+					};
+				length = 0;
+				buf = *(pkts--);
+				ds = 1;
+				goto next_pkt_part;
 			}
 			/*
 			 * 2 DWORDs consumed by the WQE header + ETH segment +
@@ -577,6 +588,7 @@
 			0,
 			0,
 		};
+next_pkt_part:
 		wqe->eseg = (rte_v128u32_t){
 			0,
 			cs_flags,
diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
index 949035b..951e50a 100644
--- a/drivers/net/mlx5/mlx5_txq.c
+++ b/drivers/net/mlx5/mlx5_txq.c
@@ -314,8 +314,12 @@
 		/* CQ to be associated with the receive queue. */
 		.recv_cq = tmpl.cq,
 		.cap = {
-			/* Max number of outstanding WRs. */
-			.max_send_wr = ((priv->device_attr.max_qp_wr < desc) ?
+			/*
+			 * Max number of outstanding WRs.
+			 * "+1" for null WQE place holder.
+			 */
+			.max_send_wr = ((priv->device_attr.max_qp_wr <
+					(desc + 1)) ?
 					priv->device_attr.max_qp_wr :
 					desc),
 			/*
-- 
1.8.3.1



More information about the dev mailing list