[dpdk-dev] [PATCH v2 05/23] mlx4: merge RX queue setup functions

Adrien Mazarguil adrien.mazarguil at 6wind.com
Tue Jun 30 11:27:51 CEST 2015


From: Alex Rosenbaum <Alexr at mellanox.com>

Make rxq_setup_qp() handle inline support like rxq_setup_qp_rss() instead of
having two separate functions.

Signed-off-by: Alex Rosenbaum <Alexr at mellanox.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil at 6wind.com>
---
 drivers/net/mlx4/mlx4.c | 61 ++++++++-----------------------------------------
 1 file changed, 9 insertions(+), 52 deletions(-)

diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index 08b1b81..8be1574 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -2653,10 +2653,9 @@ repost:
 	return ret;
 }
 
-#ifdef INLINE_RECV
-
 /**
- * Allocate a Queue Pair in case inline receive is supported.
+ * Allocate a Queue Pair.
+ * Optionally setup inline receive if supported.
  *
  * @param priv
  *   Pointer to private structure.
@@ -2676,7 +2675,6 @@ rxq_setup_qp(struct priv *priv, struct ibv_cq *cq, uint16_t desc)
 		.send_cq = cq,
 		/* CQ to be associated with the receive queue. */
 		.recv_cq = cq,
-		.max_inl_recv = priv->inl_recv_size,
 		.cap = {
 			/* Max number of outstanding WRs. */
 			.max_recv_wr = ((priv->device_attr.max_qp_wr < desc) ?
@@ -2689,61 +2687,22 @@ rxq_setup_qp(struct priv *priv, struct ibv_cq *cq, uint16_t desc)
 					 MLX4_PMD_SGE_WR_N),
 		},
 		.qp_type = IBV_QPT_RAW_PACKET,
-		.pd = priv->pd
+		.comp_mask = IBV_EXP_QP_INIT_ATTR_PD,
+		.pd = priv->pd,
 	};
 
-	attr.comp_mask = IBV_EXP_QP_INIT_ATTR_PD;
+#ifdef INLINE_RECV
+	attr.max_inl_recv = priv->inl_recv_size;
 	attr.comp_mask |= IBV_EXP_QP_INIT_ATTR_INL_RECV;
-
+#endif
 	return ibv_exp_create_qp(priv->ctx, &attr);
 }
 
-#else /* INLINE_RECV */
-
-/**
- * Allocate a Queue Pair.
- *
- * @param priv
- *   Pointer to private structure.
- * @param cq
- *   Completion queue to associate with QP.
- * @param desc
- *   Number of descriptors in QP (hint only).
- *
- * @return
- *   QP pointer or NULL in case of error.
- */
-static struct ibv_qp *
-rxq_setup_qp(struct priv *priv, struct ibv_cq *cq, uint16_t desc)
-{
-	struct ibv_qp_init_attr attr = {
-		/* CQ to be associated with the send queue. */
-		.send_cq = cq,
-		/* CQ to be associated with the receive queue. */
-		.recv_cq = cq,
-		.cap = {
-			/* Max number of outstanding WRs. */
-			.max_recv_wr = ((priv->device_attr.max_qp_wr < desc) ?
-					priv->device_attr.max_qp_wr :
-					desc),
-			/* Max number of scatter/gather elements in a WR. */
-			.max_recv_sge = ((priv->device_attr.max_sge <
-					  MLX4_PMD_SGE_WR_N) ?
-					 priv->device_attr.max_sge :
-					 MLX4_PMD_SGE_WR_N),
-		},
-		.qp_type = IBV_QPT_RAW_PACKET
-	};
-
-	return ibv_create_qp(priv->pd, &attr);
-}
-
-#endif /* INLINE_RECV */
-
 #ifdef RSS_SUPPORT
 
 /**
  * Allocate a RSS Queue Pair.
+ * Optionally setup inline receive if supported.
  *
  * @param priv
  *   Pointer to private structure.
@@ -2766,9 +2725,6 @@ rxq_setup_qp_rss(struct priv *priv, struct ibv_cq *cq, uint16_t desc,
 		.send_cq = cq,
 		/* CQ to be associated with the receive queue. */
 		.recv_cq = cq,
-#ifdef INLINE_RECV
-		.max_inl_recv = priv->inl_recv_size,
-#endif
 		.cap = {
 			/* Max number of outstanding WRs. */
 			.max_recv_wr = ((priv->device_attr.max_qp_wr < desc) ?
@@ -2787,6 +2743,7 @@ rxq_setup_qp_rss(struct priv *priv, struct ibv_cq *cq, uint16_t desc,
 	};
 
 #ifdef INLINE_RECV
+	attr.max_inl_recv = priv->inl_recv_size,
 	attr.comp_mask |= IBV_EXP_QP_INIT_ATTR_INL_RECV;
 #endif
 	if (parent) {
-- 
2.1.0



More information about the dev mailing list