]> git.openfabrics.org - ~shefty/libmlx4.git/commitdiff
max_recv_wr must be > 0 for non-SRQ QPs
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Wed, 28 Nov 2007 10:44:20 +0000 (12:44 +0200)
committerRoland Dreier <rolandd@cisco.com>
Thu, 29 Nov 2007 03:46:24 +0000 (19:46 -0800)
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 <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
src/verbs.c

index 7fa1dbc482b0741c55e7e46487dacf4c15742a0e..50e0947c4ee3935f8c6ea7de3196c7bb482bb153 100644 (file)
@@ -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;