aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Dreier <rolandd@cisco.com>2007-07-17 23:59:02 -0400
committerRoland Dreier <rolandd@cisco.com>2007-07-17 23:59:02 -0400
commit7f5eb9bb8c7fb3bd411674b856872d7ab4a7b1a3 (patch)
tree9bc3e1aae12ad6adbe76d2187aeb63cdd340ff43
parentc9f2ba5ed26a204a78bf23aa08a4f528f11a18f4 (diff)
IB/mlx4: Return receive queue sizes for userspace QPs from query QP
Return the receive queue sizes for both userspace QPs and kernel Qps (not just kernel QPs) from mlx4_ib_query_qp(). Also zero the send queue sizes for userspace QPs to avoid a possible information leak, and set the max_inline_data for kernel QPs to 0 since inline sends are not supported for kernel QPs. Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 0793059b753a..8d09aa38fc83 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1581,17 +1581,25 @@ int mlx4_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
1581 1581
1582done: 1582done:
1583 qp_attr->cur_qp_state = qp_attr->qp_state; 1583 qp_attr->cur_qp_state = qp_attr->qp_state;
1584 qp_attr->cap.max_recv_wr = qp->rq.wqe_cnt;
1585 qp_attr->cap.max_recv_sge = qp->rq.max_gs;
1586
1584 if (!ibqp->uobject) { 1587 if (!ibqp->uobject) {
1585 qp_attr->cap.max_send_wr = qp->sq.wqe_cnt; 1588 qp_attr->cap.max_send_wr = qp->sq.wqe_cnt;
1586 qp_attr->cap.max_recv_wr = qp->rq.wqe_cnt; 1589 qp_attr->cap.max_send_sge = qp->sq.max_gs;
1587 qp_attr->cap.max_send_sge = qp->sq.max_gs; 1590 } else {
1588 qp_attr->cap.max_recv_sge = qp->rq.max_gs; 1591 qp_attr->cap.max_send_wr = 0;
1589 qp_attr->cap.max_inline_data = (1 << qp->sq.wqe_shift) - 1592 qp_attr->cap.max_send_sge = 0;
1590 send_wqe_overhead(qp->ibqp.qp_type) -
1591 sizeof (struct mlx4_wqe_inline_seg);
1592 qp_init_attr->cap = qp_attr->cap;
1593 } 1593 }
1594 1594
1595 /*
1596 * We don't support inline sends for kernel QPs (yet), and we
1597 * don't know what userspace's value should be.
1598 */
1599 qp_attr->cap.max_inline_data = 0;
1600
1601 qp_init_attr->cap = qp_attr->cap;
1602
1595 return 0; 1603 return 0;
1596} 1604}
1597 1605