From: Jack Morgenstein Date: Wed, 28 Nov 2007 10:44:20 +0000 (+0200) Subject: max_recv_wr must be > 0 for non-SRQ QPs X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=af257cd5a6a2ff7c041fccff60fd714e2d2d93a0;p=~shefty%2Flibmlx4.git max_recv_wr must be > 0 for non-SRQ QPs max_recv_wr must also be non-zero for QPs which are not associated with an SRQ. Without this patch, if the userspace caller specifies max_recv_wr == 0 for a non-srq QP, the creation will be rejected in kernel space in file infiniband/hw/mlx4/qp.c, function set_rq_size(): } else { /* HW requires >= 1 RQ entry with >= 1 gather entry */ ==> NOTE: if (is_user && (!cap->max_recv_wr || !cap->max_recv_sge)) return -EINVAL; We make sure max_recv_sge is at least 1, but not max_recv_wr. Signed-off-by: Jack Morgenstein Signed-off-by: Roland Dreier --- diff --git a/src/verbs.c b/src/verbs.c index 7fa1dbc..50e0947 100644 --- a/src/verbs.c +++ b/src/verbs.c @@ -367,8 +367,12 @@ struct ibv_qp *mlx4_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *attr) if (attr->srq) attr->cap.max_recv_wr = qp->rq.wqe_cnt = 0; - else if (attr->cap.max_recv_sge < 1) - attr->cap.max_recv_sge = 1; + else { + if (attr->cap.max_recv_sge < 1) + attr->cap.max_recv_sge = 1; + if (attr->cap.max_recv_wr < 1) + attr->cap.max_recv_wr = 1; + } if (mlx4_alloc_qp_buf(pd, &attr->cap, attr->qp_type, qp)) goto err;