aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Morgenstein <jackm@dev.mellanox.co.il>2007-11-28 12:44:20 +0200
committerRoland Dreier <rolandd@cisco.com>2007-11-28 19:46:24 -0800
commitaf257cd5a6a2ff7c041fccff60fd714e2d2d93a0 (patch)
tree70f2f383fe7139c4d798297e279598bc9785a524
parentf5cf65dcc6dfc494c4652d323e7e104a135d29b5 (diff)
downloadlibmlx4-af257cd5a6a2ff7c041fccff60fd714e2d2d93a0.tar.gz
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 <jackm@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r--src/verbs.c8
1 files changed, 6 insertions, 2 deletions
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;