From: Alex Rosenbaum <al...@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 | 62 ++++++++++++------------------------------------- 1 file changed, 15 insertions(+), 47 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 080602e..f7186fa 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -2708,9 +2708,16 @@ repost: } #ifdef INLINE_RECV +typedef struct ibv_exp_qp_init_attr mlx4_qp_init_attr_t; +#define mlx4_create_qp ibv_exp_create_qp +#else /* INLINE_RECV */ +typedef struct ibv_qp_init_attr mlx4_qp_init_attr_t; +#define mlx4_create_qp ibv_create_qp +#endif /* 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. @@ -2725,12 +2732,11 @@ repost: static struct ibv_qp * rxq_setup_qp(struct priv *priv, struct ibv_cq *cq, uint16_t desc) { - struct ibv_exp_qp_init_attr attr = { + mlx4_qp_init_attr_t attr = { /* CQ to be associated with the send queue. */ .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) ? @@ -2743,61 +2749,23 @@ 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 }; +#ifdef INLINE_RECV + attr.max_inl_recv = priv->inl_recv_size; + attr.pd = priv->pd; attr.comp_mask = IBV_EXP_QP_INIT_ATTR_PD; 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); + return mlx4_create_qp(priv->ctx, &attr); } -#endif /* INLINE_RECV */ - #ifdef RSS_SUPPORT /** * Allocate a RSS Queue Pair. + * Optionally setup inline receive if supported. * * @param priv * Pointer to private structure. -- 2.1.0